Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
new.exe中的WinAPI函数_Winapi_Assembly_Portable Executable - Fatal编程技术网

new.exe中的WinAPI函数

new.exe中的WinAPI函数,winapi,assembly,portable-executable,Winapi,Assembly,Portable Executable,我最近一直在研究创造一种新的母语。我了解PE格式的(非常)基础知识,我从网上抓到了一个具有相当友好界面的汇编程序,我成功地用它实现了一些简单的功能。但我在使用库中的函数时遇到了问题。我以前从动态编译函数调用库函数的唯一方法是手动传入函数指针——如果我创建PE文件并在它们自己的进程中执行它们,我就无法做到这一点。现在,我不打算使用CRT,但我需要访问WinAPI来实现我自己的标准库。如何生成对WinAPI函数的引用,以便PE加载程序将其修补?如何从发出C而不是汇编开始?那么直接写入ASM只是一种优

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

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

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

我意识到您正试图摆脱所有空增量的繁琐操作,但无论如何,WinAPI函数都需要这样做

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


如果您想了解如何从纯汇编引导它:旧SDK有ASM示例代码,可能新SDK仍然有。如果他们没有,DDK会。您需要编写一个导入表。它基本上是您希望在应用程序中使用的函数名列表。它由PE标题指向。加载程序将DLL文件加载到进程内存空间中,在导出表中查找请求的函数,并在导入表中保留该函数的地址。然后,您通常会取消对它的引用,并在那里
jmp


查看完整详细信息和asm示例。

我知道。我不发出C的一半原因是因为我不想被绑定到CRT、const char*字符串和#include等等。另一个原因是因为我只有一个即时汇编程序。现在,我绝对会生成一个AST和一个中间代码等等,但是我想确保我的系统作为一个整体能够正常工作,然后再着手实现整个系统。可行性研究,如果你愿意的话。LoadLibrary是WinAPI的一部分。如果不访问WinAPI,我将如何使用它?它位于内核中,从一开始就自动映射到您的进程中。如果不是的话,那么你或系统如何能够加载任何其他库,包括内核?因此,基本上,我为指针留出了一个空间,然后其余的魔法通过PE加载程序和格式完成。是的,只有指针必须是非常特定结构的一部分。对于调用常规函数指针,我还需要表演这个把戏吗?调用和jmp之间有什么区别?你有自己函数的地址,所以你不需要这个技巧。它仅用于获取导入的/WinAPI函数的地址,这些函数可能会在加载的DLL中移动,也可能会随之移动。至于jmp/call,请使用call,因为它确保函数有返回的上下文。是否也使用链接器verboten?@Hans:我将使用链接器-我的。