Windows和Native API中的系统调用?
最近我在* NIX操作系统中使用了很多汇编语言。我在想知道Windows域名。
在linux中调用约定: mov $SYS_Call_NUM,%eax mov $param1,%ebx mov $param2,%ecx int $0x80 而已。这就是我们应该如何在linux中进行系统调用。 在linux中引用所有系统调用: 关于哪个$ SYS_Call_NUM&哪些参数我们可以使用这个参考:http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html 官方参考:http://kernel.org/doc/man-pages/online/dir_section_2.html 在Windows中调用约定: ??? 在Windows中引用所有系统调用: ??? 非官方的:http://www.metasploit.com/users/opcode/syscalls.html,但是如何在汇编中使用这些,除非我知道调用约定。 官方:??? >如果你说,他们没有记录。那么如何在不知道系统调用的情况下为Windows编写libc?如何做一个Windows Assembly程序设计?至少在驱动程序编程中需要知道这些。对? 现在,所谓的Native API呢? Native API&系统调用Windows都是不同的术语指的是同一件事情?为了确认我从两个UNOFFICIAL来源进行了比较 系统呼叫:http://www.metasploit.com/users/opcode/syscalls.html Native API:http://undocumented.ntinternals.net/aindex.html 我的观察: >所有系统调用以字母Nt开头,其中Native API由许多不以字母Nt开头的函数组成。 任何人都可以确认并解释。 编辑: 还有另一个答案。这是第二个答案。我真的很喜欢它,但我不知道为什么回答者删除它。我请他转发他的答复。
如果您在Windows下进行组装编程,那么您不需要手动系统调用。您使用NTDLL和Native API为您做这个。
Native API只是在内核模式方面的包装。它所做的只是为正确的API执行系统调用。 你永远不需要手动系统调用,所以你的整个问题是多余的。 Linux系统调用代码不会改变,Windows的操作,这就是为什么你需要通过一个额外的抽象层(又名NTDLL)工作。 编辑: 另外,即使你在程序集级别工作,你仍然可以完全访问Win32 API,没有理由使用NT API开始!进口,出口等都在装配程序中工作正常。 EDIT2: 如果您真的想做手动系统调用,则需要针对每个相关的Windows版本反转NTDLL,添加版本检测(通过PEB),并为每个调用执行系统调用查找。 但是,这将是愚蠢的。 NTDLL是有原因的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |