gpt4 book ai didi

linux - 使用 defsym 定义的符号在 Ubuntu 16.10 上给出了错误的地址

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:45 27 4
gpt4 key购买 nike

如果我在 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 程序所示。

知道是什么原因造成的吗?我怀疑有安全功能。

最佳答案

在 ChangeLog 的 GCC 部分下(可在此处找到:https://wiki.ubuntu.com/YakketyYak/ReleaseNotes)

“我们已将 GCC 修改为在 amd64 和 ppc64el 架构上默认编译具有位置独立可执行支持的程序,以提高地址空间布局随机化提供的安全优势。”

要禁用此选项,只需将 -no-pie 添加到 GCC 的标志即可。

关于linux - 使用 defsym 定义的符号在 Ubuntu 16.10 上给出了错误的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com