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

标签 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);

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

最佳答案

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

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

可以在此处找到有关检索正确地址的一些旧提示:http://home.hiwaay.net/~georgech/WhitePapers/MapFiles/MapFiles.htm

关于c++ - 如何返回存储在 C++ 中特定内存地址的变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551935/

相关文章:

c++ - 为什么ubuntu 12.04下的OpenMP比串口版本慢

c++ - 嵌套循环展开

windows - nohup 未被识别为内部或外部命令

windows - Ansible 处理程序在播放结束时运行两次

c++ - 这个局部变量的声明实际上会重复很多次吗?

c++ - 如果它是成员函数,如何声明字符串数组的大小

C++ 线程安全 - map 读取

c++ - 有没有办法在程序运行时更改 linux 上发布代码中的成员变量?

c++ - DLL 和 STL 以及静态数据(天哪!)

c++ - C++中一个变量定义列表中的常量和非常量