C++Mac OS X 10.11.2 vm_read给出错误的值

C++ Mac OS X 10.11.2 vm_read Giving Wrong Value

本文关键字:read 出错 错误 vm OS C++Mac      更新时间:2023-10-16

我正试图在mac操作系统上编写一个简单的内存读写器,但遇到了问题。

写入方面运行良好,甚至vm_read也返回KERN_SUCCCESS。但是,当我尝试打印我在vm_read中引用的缓冲区时,它会给我一个错误的值。

#include <iostream>
#include <mach/mach_init.h>
#include <mach/mach.h>
using namespace std;
int main() {
    int start = 1337;
    int value = 100;
    uintptr_t buf;
    uint32_t bytesRead;
    task_t task;
    task_for_pid(current_task(), getpid(), &task);
    cout << "Step 1 (before write, should = 1337): " << start << endl;
    int reason = 0;
    if ((reason = vm_write(task, (uintptr_t) &start, (uintptr_t) &value, sizeof(int))) != KERN_SUCCESS) {
        cout << "Failed to write: " << reason << endl;
    }
    if ((reason = vm_read(task, (uintptr_t) &start, sizeof(int), &buf, &bytesRead)) != KERN_SUCCESS) {
        cout << "Failed to read: " << reason << endl;
    }
    cout << "Step 2 (after write, should = 100): " << buf << endl;
    return 0;
}

以下代码输出:

/Users/Jonathan/Library/Caches/CLion12/cmake/generated/4f3c65b6/4f3c65b6/Debug/helloworld
Step 1 (before write, should = 1337): 1337
Step 2 (after write, should = 100): 4415766528
Process finished with exit code 0

步骤2应该打印100,因为我将值100写入起始变量。(如果我执行cout << start << endl;,它将打印100)。

知道怎么了吗?谢谢

尝试将步骤2替换为:

cout << "Step 2 (after write, should = 100): " << (*(int*)buf) << endl;

Buf是指向您读取的数据的指针,因此您必须取消引用它才能从中获得实际的整数。