小编Gam*_*ent的帖子

如果您知道地址,您可以访问另一个程序的堆栈/堆吗?

只是一个杂项问题。我有一个 C++ 程序:

#include <stdio.h>

int main() 
{
    while (1) {
        int value1 = 1;
        printf("%p\n", (void *)&value1);
        void* address = (void *)&value1;
        int value2 = *(int*)address;
        printf("%d\n",value2);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的作用是获取value1的地址,将其存储在address中,然后获取address中的变量并将其存储在value2中。这工作得很好,但是,我想从另一个 C++ 程序访问该变量。我已经尝试过这个(这个文件中有两种方法):

#include<iostream>
#include <cstdint>

int main() {
    std::cout << "before seg fault" << std::flush;
    uintptr_t p = <address>;
    int value = *reinterpret_cast<int *>(p);
    int value2 = *(int*)<address>;
    std::cout << "after seg fault"<< std::flush;
    std::cout << value;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会在尝试访问该值时导致分段错误,这可能是因为操作系统不希望我访问该值或者因为该实例中不存在该值。

无论这看起来多么不切实际和愚蠢,有没有办法克服这个问题?或者说这是不可能的?顺便说一句,我为什么应该/为什么不应该这样做?

编辑:我已经批准了克里斯的答案,因为当你在 Linux 上使用 root 运行它时它工作得很好。要求同时适用于 …

c++ memory ram pointers segmentation-fault

5
推荐指数
1
解决办法
1097
查看次数

标签 统计

c++ ×1

memory ×1

pointers ×1

ram ×1

segmentation-fault ×1