【发布时间】:2018-04-06 02:49:52
【问题描述】:
我对 CPP 还是比较陌生,但我找不到任何有我问题的来源。我的 IDE 是 MSVC 2017 Preview,我想要的结果是将两个十六进制地址加在一起,然后读取地址的值。我不确定为什么,但是添加十六进制数字并不能很好地发挥作用。我会给你我目前的例子:
int number;
ReadProcessMemory(pHandle, (void*)(0x37c90000 + 0xE29FE8), &number, sizeof(number), 0);
std::cout << number << " for " << std::hex << (0x37c90000 + 0xE29FE8) << std::endl;
ReadProcessMemory(pHandle, (void*)(0x38ab9fe8), &number, sizeof(number), 0);
std::cout << number << " for " << std::hex << (0x38ab9fe8) << std::endl;
std::cout << "a = " << (0x37c90000 + 0xE29FE8) << std::endl;
std::cout << "b = " << (0x38ab9fe8) << std::endl;
我对这段代码的预测结果是两个 ReadProcessMemory 应该得到完全相同的值,但只有第二个 ReadProcessMemory(已经添加了十六进制值)正确返回。
此外,计算 A 和 B 报告完全相同地址。如果是这样,为什么 ReadProcessMemory 会发脾气并在第一个 ReadProcessMemory 上报告负数?
这是我上面代码的结果:
-331287296 for 38ab9fe8
ec40f500 for 38ab9fe8
a = 38ab9fe8
b = 38ab9fe8
抱歉,但我真的不明白为什么它们有任何不同。
【问题讨论】:
-
如果将十六进制转换为有符号整数,它们是相同的。虽然,我无法弄清楚差异的原因
-
这就像在电话簿中查找 Alice 和 Bob,然后将他们的电话号码加在一起。你可以做到,但似乎不值得付出努力。
-
最终目标是添加一个带偏移量的(基)地址以获得多级指针。除了添加地址和读取数据之外,有没有更好的解决方案?
标签: c++ winapi readprocessmemory