简体   繁体   English

C ++ Mac OS X 10.11.2 vm_read提供错误的值

[英]C++ Mac OS X 10.11.2 vm_read Giving Wrong Value

I'm trying to write a simple memory reader/writer on my mac operating system but I'm having an issue. 我正在尝试在Mac操作系统上编写一个简单的内存读取器/写入器,但是出现问题。

The writing aspect works fine, and even the vm_read returns KERN_SUCCESS. 编写方面工作正常,甚至vm_read都返回KERN_SUCCESS。 But when I try to print the buffer that I refer to in vm_read it gives me a wrong value. 但是,当我尝试打印在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;
}

The following code outputs: 以下代码输出:

/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

Step 2 should print 100 since I write a value of 100 to the start variable. 第2步应打印100,因为我将100写入了起始变量。 (If I do cout << start << endl; it prints 100). (如果我执行cout << start << endl;它将打印100)。

Any idea what is wrong? 知道有什么问题吗? Thanks! 谢谢!

Try replacing step 2 with: 尝试将步骤2替换为:

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

Buf is a pointer to the data you read, so you must dereference it to get the actual integer from there. Buf是指向您读取的数据的指针,因此您必须取消引用它才能从此处获取实际的整数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM