gpt4 book ai didi

windows - Windows 和 native API 中的系统调用?

转载 作者:IT王子 更新时间:2023-10-29 00:15:21 25 4
gpt4 key购买 nike

最近我在 *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 程序集编程?至少在驱动程序编程中需要知道这些。对吧?

现在,所谓的 Native API 怎么了? Native APISystem calls for windows 是指同一事物的不同术语吗?为了确认我从两个非官方来源比较了这些

系统调用:http://www.metasploit.com/users/opcode/syscalls.html

native API:http://undocumented.ntinternals.net/aindex.html

我的观察:

  1. 所有系统调用都以字母 Nt 开头,而 Native API 由许多不以字母 Nt 开头的函数组成。
  2. windows系统调用Native API的子集。系统调用只是 native API 的一部分。

谁能证实这一点并解释一下。

编辑:

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

最佳答案

如果您在 Windows 下进行汇编编程,则无需进行手动系统调用。您可以使用 NTDLL 和 Native API 来为您完成这项工作。

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

您永远不需要手动系统调用,因此您的整个问题都是多余的。

Linux 系统调用代码不会改变,Windows 会改变,这就是为什么您需要通过额外的抽象层(也称为 NTDLL)工作。

编辑:

此外,即使您在汇编级别工作,您仍然可以完全访问 Win32 API,没有理由一开始就使用 NT API!导入、导出等在汇编程序中都可以正常工作。

编辑2:

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

然而,那将是愚蠢的。 NTDLL 的存在是有原因的。

人们已经完成了逆向工程部分:参见 https://j00ru.vexillium.org/syscalls/nt/64/每个 Windows 内核的系统调用号表。 (请注意,即使在 Windows 10 的版本之间,后面的行也会发生变化。)同样,除了在您自己的机器上进行的个人使用实验之外,这是一个坏主意,以了解更多关于 asm 和/或 Windows 内部结构的信息。不要将系统调用内联到您分发给其他任何人的代码中。

关于windows - Windows 和 native API 中的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2489889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com