我最近一直在寻找创建一种新的母语。我理解PE格式的(非常)基础知识,我已经抓住了一个带有相当类型接口的汇编程序,我已经成功地用来实现一些简单的函数。但是我使用库中的函数遇到了问题。我之前从动态编译函数调用库函数的唯一方法是手动传入函数指针 - 如果我创建PE文件并在自己的进程中执行它们,我就无法做到这一点。现在,我不打算使用CRT,但我需要访问Win API来实现我自己的标准库。如何生成对WinAPI函数的引用,以便PE加载器对其进行修补?
答案 0 :(得分:2)
您需要编写导入表。它基本上是您希望在应用程序中使用的函数名列表。 PE标头指出了这一点。加载器为您将DLL文件加载到进程内存空间,在其导出表中查找请求的函数,并在导入表中保留它的地址。然后,您通常会取消引用该jmp
。
查看Izelion's assembly tutorial以获取完整详细信息和asm示例。
答案 1 :(得分:0)
如何通过发出C代替汇编来开始?然后直接写入ASM只是一种优化。
我不是很滑稽:大多数编译器会在最终的本机代码传递之前找到某种中间代码。
我意识到你正试图摆脱所有null-delmited rigmarole,但无论如何你都需要WinAPI函数。
重新阅读你的问题:你确实意识到你可以通过调用LoadLibrary(),然后调用GetProcAddress(),然后设置调用来获取WinAPI函数地址......对吗?
如果你想看看如何从纯汇编中引导它:旧的SDK有ASM示例代码,可能还有新的代码。如果他们不这样做,DDK会。