在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系统调用是Native API的子集。系统调用只是Native API的一部分。
任何人都可以确认并解释。
编辑:
还有另一个答案。这是第二个答案。我真的很喜欢它,但我不知道为什么回答者删除它。我请他转发他的答复。
Native API只是在内核模式方面的包装。它所做的只是为正确的API执行系统调用。
你永远不需要手动系统调用,所以你的整个问题是多余的。
Linux系统调用代码不会改变,Windows的操作,这就是为什么你需要通过一个额外的抽象层(又名NTDLL)工作。
编辑:
另外,即使你在程序集级别工作,你仍然可以完全访问Win32 API,没有理由使用NT API开始!进口,出口等都在装配程序中工作正常。
EDIT2:
如果您真的想做手动系统调用,则需要针对每个相关的Windows版本反转NTDLL,添加版本检测(通过PEB),并为每个调用执行系统调用查找。
但是,这将是愚蠢的。 NTDLL是有原因的。