如何动态加载每个需要的功能
How to dynamically load every needed function
我正在尝试找到一种方法来动态加载我需要使用的每个 Windows API 函数。例如,要使用 printf
函数,我会这样做:
#include <windows.h>
typedef int (*printfPtr)(const char *str, ...);
int main(){
HMODULE handle = LoadLibraryA("crtdll.dll");
if(handle == NULL) return;
printfPtr printfAdr = (printfPtr)GetProcAddress(handle, "printf");
(*printfAdr)("This is a test\n");
}
这是一个快速编码的工作片段。这样做很容易,因为我遵循了一个指南,该指南告诉我可以从 crtdll.dll
加载 printf
。但是,现在我想加载 CreateFileA
函数,但我不知道如何找到要加载的正确 dll。
我已经尝试 Google 一些东西并在 MSDN 上进行了搜索,但我没有找到任何东西。通常,给定一个函数(一个常见的函数,例如 windows.h
、stdio.h
或 stdlib.h
中的函数),如何找到要加载的 dll?
N.B。我知道你们中的一些人可能认为以这种方式加载功能没有用。然而,这不是真正的程序。在真实的中,地址LoadLibraryA
和GetProcAddress
是手动找到的,我可以编写代码然后从PE中导出段。
您示例中的函数 (printf
) 不是 Windows API 函数,而是 C 标准中定义的函数。因此,它应该更容易获得。然而,这再次强调了这一点,即如果您没有任何可用的标准或 Windows API 函数,那么就会有很多 dll 需要了解。我不知道在一个源文件中将它们全部定义在一个地方,但是您可以使用 www.pinvoke.net 这样的资源根据具体情况加载您的函数,它可以让您输入函数名称并检索要加载的 dll 的名称(以及 C# 方法签名,但您不需要它,您已经知道 C 签名)。
我正在尝试找到一种方法来动态加载我需要使用的每个 Windows API 函数。例如,要使用 printf
函数,我会这样做:
#include <windows.h>
typedef int (*printfPtr)(const char *str, ...);
int main(){
HMODULE handle = LoadLibraryA("crtdll.dll");
if(handle == NULL) return;
printfPtr printfAdr = (printfPtr)GetProcAddress(handle, "printf");
(*printfAdr)("This is a test\n");
}
这是一个快速编码的工作片段。这样做很容易,因为我遵循了一个指南,该指南告诉我可以从 crtdll.dll
加载 printf
。但是,现在我想加载 CreateFileA
函数,但我不知道如何找到要加载的正确 dll。
我已经尝试 Google 一些东西并在 MSDN 上进行了搜索,但我没有找到任何东西。通常,给定一个函数(一个常见的函数,例如 windows.h
、stdio.h
或 stdlib.h
中的函数),如何找到要加载的 dll?
N.B。我知道你们中的一些人可能认为以这种方式加载功能没有用。然而,这不是真正的程序。在真实的中,地址LoadLibraryA
和GetProcAddress
是手动找到的,我可以编写代码然后从PE中导出段。
您示例中的函数 (printf
) 不是 Windows API 函数,而是 C 标准中定义的函数。因此,它应该更容易获得。然而,这再次强调了这一点,即如果您没有任何可用的标准或 Windows API 函数,那么就会有很多 dll 需要了解。我不知道在一个源文件中将它们全部定义在一个地方,但是您可以使用 www.pinvoke.net 这样的资源根据具体情况加载您的函数,它可以让您输入函数名称并检索要加载的 dll 的名称(以及 C# 方法签名,但您不需要它,您已经知道 C 签名)。