首页 > 解决方案 > 使用 LoadLibraryA 加载 dll,然后读取其中的变量

问题描述

我环顾四周,已经到了可以加载 DLL 并使用它GetProcAddress()来查找导出函数的地址的地步。我坚持的部分是当我打印出函数的地址时,我得到了大量的0s (准确地说是这么多:)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 之前,我让它打印了一个单词,并且效果很好。

标签: c++dll

解决方案


推荐阅读