如何在已剥离符号的可执行文件中以单步模式启动程序?
调试无符号表的汇编程序:入口点断点/单步启动方法
针对符号被剥离的汇编程序,你可以用以下几种GDB操作直接定位到入口点并开始调试:
方法1:用starti直接启动并停在第一条指令
这是最直接的方式,starti命令会让GDB启动程序后,在进程执行的第一条用户态指令处立即停下,完全不需要依赖符号表,刚好对应可执行文件的入口点(也就是原本_start的位置)。
操作步骤:
- 加载程序到GDB:
gdb ./your_stripped_program - 输入
starti,回车后程序就会停在入口点的第一条指令 - 之后用
si(单步执行一条指令)或者ni(单步跳过函数调用)开始调试
方法2:手动获取入口地址后设断点
如果你想先确认入口地址,再手动设置断点:
- 在GDB里输入
info file,输出里会有Entry point:字段,比如:Entry point: 0x555555555040 - 用地址设置断点:
b *0x555555555040(注意星号不能少,代表直接在内存地址设断点) - 输入
run启动程序,会直接在入口点停下
补充说明
starti和普通的start命令不同:start依赖符号表在main函数开头停下,而starti完全不依赖符号,只认进程启动后的第一条指令,完美适配符号被剥离的场景。- 如果提前用
objdump这类工具查到了入口地址,也可以直接在启动GDB时指定断点:gdb -ex 'b *0x1234' ./your_stripped_program,再输入run即可。
内容的提问来源于stack exchange,提问作者Orion
相关产品推荐
相关产品推荐

