流程的文本段是否禁止?

时间:2017-09-19 01:20:52

标签: c pointers memory architecture

我对构建和操作系统都很陌生,所以我想我会玩弄一些东西,我试着看看是否可以打印进程内存的文本部分。 / p>

据我了解,内存是" text ||堆||酉|| stack",地址从左到右增加。因此,如果我从堆栈中的某个地址开始并向下移动,我最终应该点击文本。

所以我写了这个C程序:

#include <stdio.h>
int main()
{
    char s='a';
    long int i=0;
    unsigned char* byte_array= &s;
    while (1){
        printf("%02x",*(byte_array-i));
        i++;
    }
}

很高兴地打印出一堆乱七八糟的十六进制,而不是惊人数量的0,然后有一个分段错误。我的猜测是0是单位数据 - 但为什么它不能继续读取文本段?进程是否具有对其自己的代码的读取权限?如果是这样,为什么我无法达到它?

要检查它是否在0运行之前没有读取它的代码,我将可执行文件打开为十六进制,选择一个随机的短子串,并在我的程序输出中搜索它。它不在那里。

如果进程可以读取自己的代码,我该怎么做?

这是在OS X 10.11.6上运行的,用clang编译,如果改变的话。

0 个答案:

没有答案