c++ - 使用 LoadLibraryA 加载 dll,然后读取其中的变量
问题描述
我环顾四周,已经到了可以加载 DLL 并使用它GetProcAddress()
来查找导出函数的地址的地步。我坚持的部分是当我打印出函数的地址时,我得到了大量的0
s (准确地说是这么多:)0000000000000000
。最后,我正在尝试读取其中的字符的名称。
.hpp
文件:
typedef char* (*t_Username)();
extern t_Username GetUsername;
如果你愿意的话,我不太确定这是什么,因为我是从“基地”得到的。
.cpp
文件:
t_Username GetUsername;
std::string test = "";
int main()
{
auto dll = LoadLibraryA("DLL.dll");
GetUsername = (t_Username)GetProcAddress(ORACLE, "GetUsername");
std::cout << GetUsername;
test = "Hello " + std::string(GetUsername());
std::cout << test;
}
我的 DLL:
#include "pch.h"
#include <iostream>
void onAttach() {
const char* GetUsername = "whatever.f";
std::cout << GetUsername << std::endl;
Sleep(100000000000);
}
BOOL WINAPI DllMain(
HINSTANCE hInstDll,
DWORD dwReason,
LPVOID lpReserved)
{
switch (dwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstDll);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)onAttach, 0, 0, 0);
break;
default:
return FALSE;
break;
}
return TRUE;
}
在我将 char 添加到 void 之前,我让它打印了一个单词,并且效果很好。
解决方案
推荐阅读
- visual-studio - Visual Studio 的“转到定义”不适用于 javascript 库
- docker - Gitlab总是自动退出
- postgresql - 如果列中的任何条目中甚至有一个非英语字符,我希望在另一列中具有“真”
- templating - 使用一个请求的参数动态改变另一个请求的响应
- python - 网站上有问题scrapy评论:json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)
- testing - 如何使用 chrono 以明确的时区运行 Rust 测试?
- raytracing - 如何使形状上的正方形补丁平滑?
- python - 反向 Django 管理 URL
- c++ - 以十六进制格式表示 fp16 最小数字
- spring-boot - 由于未为 StandardMultipartFile 类型的请求正文设置 Content-Type“multipart/form-data”,无法上传文件