Windows和Native API中的系统调用?

前端之家收集整理的这篇文章主要介绍了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系统调用是Native API的子集。系统调用只是Native API的一部分。

任何人都可以确认并解释。

编辑:

还有另一个答案。这是第二个答案。我真的很喜欢它,但我不知道为什么回答者删除它。我请他转发他的答复。

如果您在Windows下进行组装编程,那么您不需要手动系统调用。您使用NTDLL和Native API为您做这个。

Native API只是在内核模式方面的包装。它所做的只是为正确的API执行系统调用

你永远不需要手动系统调用,所以你的整个问题是多余的。

Linux系统调用代码不会改变,Windows的操作,这就是为什么你需要通过一个额外的抽象层(又名NTDLL)工作。

编辑:

另外,即使你在程序集级别工作,你仍然可以完全访问Win32 API,没有理由使用NT API开始!进口,出口等都在装配程序中工作正常。

EDIT2:

如果您真的想做手动系统调用,则需要针对每个相关的Windows版本反转NTDLL,添加版本检测(通过PEB),并为每个调用执行系统调用查找。

但是,这将是愚蠢的。 NTDLL是有原因的。

猜你在找的Windows相关文章