我的许多 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/