如何动态加载每个所需的功能

问题描述 投票:-1回答:1

我正在尝试找到一种方法来动态加载我需要使用的每个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");
}

这是一个快速编码的工作代码段。这样做很容易,因为我按照指南告诉我,我可以从printf加载crtdll.dll。但是,现在我想加载CreateFileA函数,但我不知道如何找到正确的dll加载。

我已经尝试了谷歌的东西,并在MSDN上搜索,但我没有找到任何东西。一般来说,给定一个函数(一个常见的函数,例如windows.hstdio.hstdlib.h中的一个函数),我如何找到要加载的dll?

注:我知道有些人可能认为加载功能这种方式没有用。但是,这不是真正的计划。在真实的地址中,手动找到地址LoadLibraryAGetProcAddress,我可以编写代码,然后从PE导出段。

c windows dll loadlibrary getprocaddress
1个回答
1
投票

示例中的函数(printf)不是Windows API函数,而是C标准中定义的函数。因此它应该更容易获得。然而,这再次强调了如果你没有任何标准或Windows API函数可以让很多dll知道的话。我不知道有一个地方在一个源文件中定义它们,但您可以使用像www.pinvoke.net这样的资源逐个加载函数,它允许您键入函数名称并检索dll的名称加载(以及C#方法签名,但你不需要它,你已经知道C签名)。

© www.soinside.com 2019 - 2024. All rights reserved.