【发布时间】:2016-10-17 20:36:54
【问题描述】:
如果我在 Ubuntu 16.10 上链接程序时定义了符号地址,则在运行程序时似乎不会产生正确的地址。比如下面的程序
#include <stdio.h>
extern int mem_;
int main()
{
printf("%p\n", &mem_);
}
和编译
gcc example.c -o example -Xlinker --defsym=mem_=0x80
然后在旧 Ubuntu 系统上运行程序会打印 0x80,但在 Ubuntu 16.10 上会打印随机数。然而,0x80 符号似乎进入了可执行文件,如 nm 程序所示。
任何想法是什么导致了这个?我怀疑是安全功能。
【问题讨论】: