0

我最近一直在研究创建一种新的母语。我了解 PE 格式的(非常)基础知识,并且我已经从网上获取了一个具有相当友好接口的汇编程序,我已经成功地使用它来实现一些简单的功能。但是我在使用库中的函数时遇到了问题。我之前从动态编译的函数中调用库函数的唯一方法是手动传入函数指针——如果我创建 PE 文件并在它们自己的进程中执行它们,这是我无法做到的。现在,我不打算使用 CRT,但我需要访问 Win API 来实现我自己的标准库。如何生成对 WinAPI 函数的引用,以便 PE 加载程序对其进行修补?

4

2 回答 2

2

您需要编写一个导入表。它基本上是您希望在应用程序中使用的函数名称列表。它由 PE 标头指向。加载器为您将 DLL 文件加载到进程内存空间中,在它们的导出表中找到请求的函数,并将其地址留在导入表中。然后,您通常会在那里取消引用jmp

查看Izelion 的组装教程以获取完整的详细信息和 asm 示例。

于 2010-11-01T14:38:33.043 回答
0

从发出 C 而不是汇编开始怎么样?那么直接写入ASM只是一种优化。

我不是在开玩笑:大多数编译器会在最终的本机代码通过之前生成某种中间代码。

我意识到您正试图摆脱所有以空分隔的繁琐,但无论如何您都需要 WinAPI 函数。

重新阅读您的问题:您确实意识到可以通过调用 LoadLibrary(),然后调用 GetProcAddress(),然后设置调用来获取 WinAPI 函数地址……对吗?

如果你想看看如何从纯汇编中引导它:旧的 SDK 有 ASM 示例代码,可能新的仍然有。如果他们不这样做,DDK 会的。

于 2010-11-01T14:24:33.453 回答