代码之家  ›  专栏  ›  技术社区  ›  Puppy

new.exe中的WinAPI函数

  •  0
  • Puppy  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   kichik    14 年前

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

    Izelion's assembly tutorial

        2
  •  0
  •   egrunin    14 年前

    从发出C而不是汇编开始怎么样?然后直接写给ASM只是一个优化。

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

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

    如果您想了解如何从纯程序集引导它:旧的sdk有ASM示例代码,可能新的sdk仍然有。如果他们不这样做,DDK会的。