<分区>
假设我没有导入 .lib 库 我希望一切都以原始方式进行,通过手动编写 调用(如汇编或纯 c)
GetProcAdress LoadLibrary 是 winapi dll 的一部分 通常加载 dll 并获取指针 对于我需要调用这两个函数的函数,但是因为我 没有得到它们我可以用什么来获得它们?
这有点像悖论,可能可以通过其他一些机制来解决,但是这里我缺乏知识,我不知道这个机制是什么,有人可以解释一下吗?
<分区>
假设我没有导入 .lib 库 我希望一切都以原始方式进行,通过手动编写 调用(如汇编或纯 c)
GetProcAdress LoadLibrary 是 winapi dll 的一部分 通常加载 dll 并获取指针 对于我需要调用这两个函数的函数,但是因为我 没有得到它们我可以用什么来获得它们?
这有点像悖论,可能可以通过其他一些机制来解决,但是这里我缺乏知识,我不知道这个机制是什么,有人可以解释一下吗?
最佳答案
我以前确实设法做到过。确实有可能。解决方案是基本上实现 LdrGetDllHandle
手动 并使用它来搜索 LdrLoadDll
/LdrUnloadDll
和 LdrGetProcedureAddress
在 NTDLL
中,通过 NtCurrentPeb
获取指向进程的 PEB_LDR_DATA
数据结构的指针,这是一个读取 FS 或 GS 的宏CPU 寄存器。
一旦您获得了这三个函数的指针,您就可以使用它们来加载您需要的其他 DLL。
我不打算为您发布代码,但是如果您查看 ReactOS 的源代码,您应该能够逐渐弄清楚如何实现它——我认为这些应该是足够的指针(没有双关语意图)让你开始。 :)
关于c - 没有它们如何获取 GetProcAdress 和 LoadLibrary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817005/