How does the Subsystem for Unix application on Windows implement system calls in the assembly?


Such as this linux system call int $0x80.

Does SUA implement something similar? If so, what are the commands?

this particular code is the one I want to change to use on SUA

#cpuid.s Sample program to extract the processor Vendor ID
.section .data
    .ascii "The processor Vendor ID is 'xxxxxxxxxxxxx'\n"
.section .text
.globl _start
    movl $0, %eax
    movl $output, %edi
    movl %ebx, 28(%edi)
    movl %edx, 32(%edi)
    movl %ecx, 36(%edi)
    movl $4, %eax
    movl $1, %ebx
    movl $output, %ecx
    movl $42, %edx
    int $0x80
    movl $1, %eax
    movl $0, %ebx
    int $0x80

It's the Subsystem for Unix, not an Entire Computer Running Linux.

int 0x80 is a way to invoke system calls on Linux. It's an implementation detail as far as POSIX is concerned, and POSIX is really what Linux and SUA have in common. So I'd say that while Linux (on x86) does support 0x80 for system calls, I see no reason why SUA on Windows would need to. That's because SUA isn't a system that includes that level of compatibility with Linux. If you build a program on Linux it may use int 0x80 but you may find it does something quite different if you build it under SUA to achieve the goal of making a system call.

What are you trying to accomplish?