如何从程序集正确调用 Windows API 方法

Tom*_* S. 5 windows dll assembly winapi

简单来说,我正在尝试手工组装(请不要问它)

但是,我遇到了调用API函数的问题,比如从win32 API调用。在各种汇编语言中,您要做的是包含或导入诸如“windows.lib”或“windows.inc”或类似的内容。问题是,这因汇编程序而异,甚至输出(二进制)看起来也不同;我想不通。

所以我的一般问题是:从 DLL 库调用 API 方法在二进制版本中与在 Windows PE 文件中一样如何?

我试图在互联网上四处寻找有关这方面的资源,但没有成功......

Lol*_*ado -4

最好的方法是阅读有关 NTDLL 的微软文档,但显然只有付费才能阅读任何参考资料(使用MSDN 服务

另一种方法是:使用调试器,了解如何请求 NTDLL。

每一步和更多信息:

  1. 首先,使用调试器下载几个程序,找出它们对 NTDLL 进行了哪些调用,内核调用的抽象层是什么,出于安全原因,NTDLL 永远不会位于同一地址,因此只能有一个始终指向的变量到ntdll,即ram中的变量寄存器。

  2. 了解 NTDLL 使用什么决策机制来定义参数以及调用的目的。

您可以在其中找到相关信息的参考资料:Fasm 论坛 文章:如何直接调用 NTDLL