打印内存时出现段错误

时间:2016-08-06 20:10:30

标签: c memory disassembly

我写了一些代码来从地址读取数据。这个地址属于代码段(我反汇编我的二进制文件并查找main所在的位置,因此地址来自那里)。主要目标是改变内容。当我打印它时,它会导致段错误。这是某种保护吗?

void at(){


    char *p = 0x0000000100000f47;
    printf("%c", p[0]);

}

int main(){

    at();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

是否有某种保护?

是。分割!这就是你遇到分段错误的原因。

  

我反汇编我的二进制文件并查找main所在的位置,因此地址来自那里

并没有多说;当一个可执行文件被加载时,它的一部分被重新定位,所以它们最终会在不同的位置。

这是一个相当复杂的过程(并且容易出错),它涉及libc / rtloader /你的操作系统/黑魔法;甚至可能在这里进行内存布局随机化(可能不是,对于你的代码),因此运行时有意识地确保你不能猜测"某些东西的记忆位置。