You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法调试GOT表延迟解析:条目在首次调用前已完成解析

问题:GOT表解析流程未触发,GOT条目提前被填充

我编写了一个调用动态库的小程序,目的是跟踪GOT表的解析过程。当调用_print_string时,程序进入了PLT的以下代码段:

0x0000555555555030  ? jmp    *0x2f8a(%rip)        # 0x555555557fc0 <_print_string@got.plt>
0x0000555555555036  ? push   $0x0
0x000055555555503b  ? jmp    0x555555555020

按照预期,第一次执行时应该通过第一条jmp指令跳转到push $0x0所在的代码,触发动态链接器解析_print_string的实际地址,但逐行调试时发现GOT表中已经提前存储了_print_string的正确地址。我使用GDB在_print_string@plt处设置断点并运行程序,确认使用的是共享库而非静态库。


补充1:主函数汇编代码(x86-64 AT&T格式)

仅粘贴到函数调用部分:

.global main
.type main function

main:
    push %rbp
    mov %rsp, %rbp
    push %rdi # argc (%rbp - 8)
    push %rsi # argv (%rbp - 16)
    push $0   # index (i) (%rbp - 24)
    leaq nargsmsg(%rip), %rdi
    call _print_string

补充2:puts的GOT条目提前解析示例

.global main
.type main function

.text

main:
    push %rbp
    mov %rsp, %rbp
    leaq string(%rip), %rdi
    call puts
    mov $0, %rax
    leave
    ret

.data
string: .asciz "Hello world\n"

补充3:已尝试的排查操作

  • 曾使用gdb-dashboard,禁用后问题仍存在
  • 用-z norelro参数编译,通过checksec验证该选项已生效
  • 检查环境变量LD_BIND_NOW,确认未定义
    但以上操作后,问题依旧存在。

内容的提问来源于stack exchange,提问作者DrStein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:22