gpt4 book ai didi

c - 如何在 OS X 中禁用 .text 重定位?

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:21 25 4
gpt4 key购买 nike

我正在尝试通过 OS X 中的 __builtin_return_address() 获取返回地址:

/* foo.c */
#include <stdio.h>

void foo() {
printf("return address: %p\n", __builtin_return_address(0));
}

int main() {
foo();
}

bash-3.2$ clang foo.c
bash-3.2$ nm a.out
0000000100000000 T __mh_execute_header
0000000100000f40 T _foo
0000000100000f70 T _main
U _printf
U dyld_stub_binder

但是,它没有返回我想要的地址。

bash-3.2$ ./a.out
return address: 0x10c25cf79
bash-3.2$ atos -o a.out 0x10c25cf79
0x10c25cf79

虽然它在 LLDB 中运行良好。

bash-3.2$ lldb a.out
(lldb) target create "a.out"
Current executable set to 'a.out' (x86_64).
(lldb) r
Process 77500 launched: '/private/tmp/a.out' (x86_64)
return address: 0x100000f79
Process 77500 exited with status = 0 (0x00000000)
(lldb) q
bash-3.2$ atos -o a.out 0x100000f79
main (in a.out) + 9               

这是怎么回事,我该如何解决?

最佳答案

@BrettHale 在评论中回答。这是由 ASLR 引起的。

通过 -no_pie 选项禁用 ASLR 可解决此问题。

$ clang -Wl,-no_pie foo.c
$ ./a.out
return address: 0x100000f79

关于c - 如何在 OS X 中禁用 .text 重定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201290/

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