微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows上的Unix应用程序子系统如何在程序集中实现系统调用?

如何解决Windows上的Unix应用程序子系统如何在程序集中实现系统调用?

| 例如这个Linux系统调用
int $0x80
。 SUA是否实现类似的功能? 如果是这样,命令是什么? 这是我要更改为在SUA上使用的特定代码
#cpuid.s Sample program to extract the processor vendor ID
.section .data
output:
    .ascii \"The processor vendor ID is \'xxxxxxxxxxxxx\'\\n\"
.section .text
.globl _start
_start:
    movl $0,%eax
    cpuid
    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
    

解决方法

        它是Unix的子系统,而不是运行Linux的整个计算机。 int 0x80是在Linux上调用系统调用的一种方式。就POSIX而言,这是一个实现细节,而POSIX确实是Linux和SUA的共同点。因此,我想说,尽管Linux(在x86上)确实支持0x80的系统调用,但我认为没有理由在Windows上使用SUA。那是因为SUA不是一个包含与Linux如此级别的兼容性的系统。如果您在Linux上构建程序,则可能会使用int 0x80,但是如果您在SUA下构建该程序以实现进行系统调用的目标,则可能会发现功能大不相同。 你想达到什么目的?     ,        Windows确实具有类似于linux的系统调用,以便从用户模式访问内核服务。尽管通常您不直接使用
syscall
int
指令,而是使用
ntdll.dll
中的包装器之一。 linux系统调用和Windows系统调用之间绝对没有1:1的关联。 当需要进行系统调用时,各种子系统(例如Win32,例如kernel32.dll和user32.dll,以及POSIX,例如SUA库)将调用
ntdll.dll
函数。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。