【问题标题】:Qt Read memory pointer valueQt 读取内存指针值
【发布时间】:2015-11-11 11:11:40
【问题描述】:

我需要这个方法的帮助。

我在 C++ 中使用相同的代码,但 Qt 值不是相同的示例

DWORD address = 0x004D2004;
DWORD offset = 0x4;
int value=0;

ReadProcessMemory(_hwnd,(void*)address + offset,&value,(DWORD)sizeof(value));
QMessageBox::Information(this,QString::number(value),tr("Value is:"),QMessageBox::ok);

如果我阅读结果示例,如果没有 Qt:5

否则我尝试使用 Qt 读取值,例如:49951447

谁知道解决方案?

【问题讨论】:

  • 你是说在同一个过程中你读取一次值然后你用一些标准函数打印它你得到 5 并使用 QString::number 再次打印它并且你收到 49951447 ?
  • 我从外部进程读取了一个通过 offsets 检索到的地址值。如果我尝试从 Qt C++ 中恢复相同代码的值,我得到 49951447。如果我尝试使用另一个 ide,在我的情况下,我的代码块得到的值正好是 5。使用相同的代码,我得到两个不同的值。在代码块上工作。虽然 Qt C++ 不能很好地工作。
  • 你能在两个 IDE 中调试吗?可能这将是找到差异的最简单方法

标签: c++ qt memory


【解决方案1】:

确保您以管理员身份进行编译。

确保编译的位数与目标进程相同,x86 对应 x86,x64 对应 x64。

您对 ReadProcessMemory() 的调用缺少最后一个参数,即“读取的字节数”。您将需要检查它以进行错误检查。

在调用 ReadProcessMemory() 之后调用 GetLastError() 并检查 ReadProcessMemory() 的返回值以进行错误检查。

这些技巧将解决您的问题。

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2015-07-09
    • 2016-12-30
    相关资源
    最近更新 更多