如何在C++中返回存储在特定内存地址中的变量的名称

1 c++ windows variables memory-address

在我从这个精彩的网站上获得了如此多的Google搜索结果之后,我第一次在这里发帖.

基本上,我想找到存储在特定内存地址的变量名称.我有一个编写的内存编辑应用程序编辑单个值,问题是每次修补应用程序保存此值时,我必须将新内存地址硬编码到我的应用程序中,并重新编译,这需要花费很多时间维持它几乎不值得做.

我想要做的是获取存储在某个内存地址的变量的名称,这样我就可以在运行时找到它的地址并将其用作要编辑的内存地址.

这都是用C++编写的.

提前致谢!

编辑:

好吧我已经决定要从.txt文件中流式传输数据了,但我不确定如何将字符串转换为LPVOID以用作WriteProcessMemory()中的内存地址.这就是我尝试过的:

    string fileContents;

    ifstream memFile("mem_address.txt");
        getline(memFile, fileContents);
    memFile.close();

    LPVOID memAddress = (LPVOID)fileContents.c_str();

    //Lots of code..

    WriteProcessMemory(WindowsProcessHandle, memAddress, &BytesToBeWrote, sizeof(BytesToBeWrote), &NumBytesWrote);
Run Code Online (Sandbox Code Playgroud)

代码在语法方面都是正确的,它编译和运行,但WriteProcessMemory错误,我只能想象它与我的错误的LPVOID变量有关.如果扩展我的问题的使用是违反规则,我道歉,如果是的话,我将删除我的编辑.

jde*_*aan 7

编译并生成所谓的map文件.使用Visual-C++(/MAP链接器选项)可以轻松完成此操作.在那里你会看到符号(函数,......)及其起始地址.使用此映射文件(注意:每次重新编译时都必须更新),您可以将地址与名称进行匹配.

这实际上并不那么容易,因为地址是相对于首选加载地址的,并且可能(随机化)与实际加载地址不同.

有关检索正确地址的一些旧提示,请访问:http://home.hiwaay.net/~georgech/WhitePapers/MapFiles/MapFiles.htm