在浏览给定可执行文件的LD_DEBUG日志时,我看到许多符号是 local 解析的,如
calloc: /lib/aarch64-linux-gnu/libc.so.6 --> /lib/aarch64-linux-gnu/libc.so.6
这是典型且有意义;许多库会导出也在内部使用的符号。
但是少数符号显示出与其他符号完全不同的绑定模式:
__environ
__progname
__progname_full
__stack_chk_guard
optind
stderr
stdin
stdout
这些符号在其绑定中表现出非平凡循环,特别是通过可执行文件:
stdout: python --> /lib/aarch64-linux-gnu/libc.so.6 --> python
__stack_chk_guard: uname --> /lib/ld-linux-aarch64.so.1 --> uname
这是什么意思?