提问人:Pieter Jansen 提问时间:11/17/2023 最后编辑:Remy LebeauPieter Jansen 更新时间:11/18/2023 访问量:61
LoadLibrary GetProcAddress - 为什么这样做?
LoadLibrary GetProcAddress - why does this work?
问:
当我使用具有函数名称的 Visual Studio Code 运行此代码时,它可以工作,并且它为我提供了指向该函数的指针。"MessageBoxA"
但是,例如,当我将函数的名称更改为并保存它时,它仍然为我提供了相同的函数地址。"MessageBoxATEST"
这怎么可能(因为这个函数不存在)?user32.dll
例如,当我将DLL的名称更改为时,它会给我错误,这是应该的。User32TEST.dll
Function not loaded ....
谁能帮忙?
#include <windows.h>
#include <stdio.h>
typedef BOOL(*func_pointer)(LPSTR, LPCSTR);
int main () {
HMODULE Handle_DLL = LoadLibrary("User32.dll");
func_pointer Pointer = (func_pointer)(Handle_DLL,"MessageBoxATEST");
if (Handle_DLL == NULL || Pointer == NULL){
DWORD error = GetLastError();
printf("Function not loaded into memory %d\n", error);
return 1;
}
else{
printf("Function address: %p\n", (void*)Pointer);
FreeLibrary(Handle_DLL);
return 0;
}
}
答:
7赞
Ben Voigt
11/17/2023
#1
使用函数名称,它确实有效,它为我提供了指向该函数的指针
"MessageBoxA"
不,它没有。
例如,当我将函数的名称更改为并保存它时,它仍然为我提供了相同的函数地址
"MessageBoxATEST"
它从来都不是函数地址。
你忘了实际打电话.您现在拥有的是(在考虑逗号运算符的行为之后),它显然不是 NULL 指针。GetProcAddress
(func_pointer)"MessageBoxATest"
评论
0赞
Pieter Jansen
11/18/2023
由于某种原因,我忘记了添加 getprocaddress,现在我确实添加了它并且它有效,当我制作 MessageBoxTEST 时,它不起作用,因为它应该起作用。谢谢
评论