如何解决GetProcAddress 的使用混淆非执行
我可能遗漏了一些很容易的东西,但我仍然遇到了这个我无法解决的问题。我用这些函数创建了一个 dll,
<Accordion>
{data.map(( id,_index,ContentTypeId) => (
<Card>
<Card.Header>
<Accordion.Toggle as={Button} variant="link" eventKey="0">
{id}
</Accordion.Toggle>
</Card.Header>
<Accordion.Collapse eventKey="0">
<Card.Body>Hello! I'm the body</Card.Body>
</Accordion.Collapse>
</Card>))}
</Accordion>
我使用 cmake 编译它
extern "C"{
__declspec(dllexport) void some();
__declspec(dllexport) void printer();
}
void printer()
{
printf("printing...\n");
}
我从我的 dllloader.cpp 加载它
cmake .. -G "Visual Studio 15 2017" -A x64 -DBUILD_SHARED_LIBS=TRUE
cmake --build . --config Release
所以 int main() {
HINSTANCE hGetProcIDDLL = LoadLibrary("mydll.dll");
if (hGetProcIDDLL == NULL) {
std::cout << "cannot locate the .dll file" << std::endl;
} else {
std::cout << "it has been called" << std::endl;
}
if(GetProcAddress(hGetProcIDDLL,"printer") == NULL){
}else{
std::cout <<"not null" << std::endl;
}
std::cout << GetLastError() << " err" << std::endl;
getchar();
return 0;
}
返回 0 但没有打印任何内容,在原始文件中它几乎相同,该函数不仅仅是一个 GetLastError
调用但函数被加载,我们如何运行它 ?我知道我可能遗漏了一些东西,只是函数没有执行。任何帮助表示赞赏
解决方法
typedef void(*my_dll_print)(); // function pointer to print method of dll
int main()
{
HINSTANCE hGetProcIDDLL = LoadLibrary("mydll.dll");
if (hGetProcIDDLL == nullptr)
std::cout << "cannot locate the .dll file" << std::endl;
else
std::cout << "it has been called" << std::endl;
my_dll_print print_method = reinterpret_cast<my_dll_print>(GetProcAddress(hGetProcIDDLL,"printer")); // Extract method address and create pointer
if (print_method == nullptr)
std::cout << "is null" << std::endl;
else
print_method(); // Call dll method
std::cout << GetLastError() << " err" << std::endl;
getchar();
return 0;
}
尝试使用 nullptr
代替 NULL
来检查 pointer
。
GetProcAdrress
从指定的动态链接库中检索导出函数或变量的地址!并且不进行函数调用。必须先赋值给函数指针,然后调用指向的函数!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。