Я пытаюсь найти способ динамически загружать все функции 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.h
, stdio.h
или stdlib.h
), как я могу найти, какую DLL загрузить?
N.B. Я знаю, что некоторые из вас могут подумать, что загрузка работает таким образом, что бесполезно. Однако это не настоящая программа. В реальном, адреса LoadLibraryA
и GetProcAddress
находятся вручную, и я могу написать код, а затем экспортировать сегмент из PE.