【发布时间】:2016-08-06 20:10:30
【问题描述】:
我写了一些代码来从地址读取数据。该地址属于代码段(我反汇编我的二进制文件并查找 main 所在的位置,因此地址来自那里)。主要目标是改变内容。当我打印它时,它会导致段错误。是某种保护吗?
void at(){
char *p = 0x0000000100000f47;
printf("%c", p[0]);
}
int main(){
at();
return 0;
}
【问题讨论】:
-
也许你在一个操作系统上运行你的代码,而那个操作系统没有让你的程序访问物理内存,也没有给你的程序/进程分配虚拟地址 0x0000000100000f47。
-
为什么不
char *p = (char *)main;。这样您就不必担心绝对地址和重定位。
标签: c memory disassembly