debian反汇编指令使用教程
导读:Debian 反汇编指令使用教程 一 常用工具与安装 在 Debian 上,常用的反汇编与辅助工具包括:objdump(来自 binutils)、gdb、radare2、ndisasm、以及多架构框架 capstone。安装命令如下:...
Debian 反汇编指令使用教程
一 常用工具与安装
- 在 Debian 上,常用的反汇编与辅助工具包括:objdump(来自 binutils)、gdb、radare2、ndisasm、以及多架构框架 capstone。安装命令如下:
- sudo apt update
- sudo apt install -y binutils gdb radare2 nasm libcapstone-dev
- 说明:objdump 用于静态反汇编与信息查看;gdb 支持动态调试与反汇编;radare2 是逆向框架;ndisasm 适合原始二进制/裸机镜像;capstone 适合编程式反汇编。
二 使用 objdump 进行静态反汇编
- 基本用法
- 反汇编可执行段:objdump -d program
- 仅反汇编 .text 段:objdump -d -j .text program
- 指定地址范围:objdump -d –start-address=0x401000 --stop-address=0x401100 program
- 反汇编所有段(含 .data/.bss 等):objdump -d –disassemble-all program
- 使用 Intel 语法(默认是 AT& T):objdump -d -M intel program
- 同时显示源码与汇编(需编译时带 -g):objdump -d -S program
- 显示符号表/重定位表:objdump -t program;objdump -r program
- 小技巧
- 分页查看:objdump -d program | less
- 结合 grep 快速定位函数:objdump -d program | grep -A 20 ‘< function_name> ’
- 示例
- objdump -d -M intel hello
- objdump -d -j .text --start-address=0x401000 --stop-address=0x401100 app
三 使用 GDB 进行动态反汇编与调试
- 准备
- 编译时加入调试信息:gcc -g -o myprogram myprogram.c
- 常用命令
- 启动与断点:gdb myprogram;break main
- 运行与继续:run;continue(c)
- 反汇编
- 当前函数:disassemble(disas)
- 指定函数:disassemble function_name
- 地址范围:disassemble 0x401000,0x401100
- 同时显示机器码:disassemble /m main
- 语法风格:set disassembly-flavor intel;show disassembly-flavor
- 查看与单步
- 查看寄存器:info registers
- 查看内存:x/10xw $sp
- 单步执行:stepi(si);nexti(ni)
- 按地址查看指令:x/3i $pc(查看 PC 处 3 条指令)
- 示例流程
- gdb hello
- (gdb) break main
- (gdb) run
- (gdb) disassemble /m main
- (gdb) si / ni / c 配合观察执行流
四 其他工具与进阶用法
- radare2(逆向框架)
- 启动:r2 program
- 反汇编当前函数:pd;反汇编指定函数:pd @ main
- 查看导入/导出:i;分析符号:s sym.< symbol_name>
- ndisasm(NASM 提供,适合原始二进制/裸机镜像)
- 32 位:ndisasm -b 32 file.bin
- 64 位:ndisasm -b 64 file.bin
- 指定加载偏移:ndisasm -b 32 -o 0x1000 file.bin
- capstone(编程式多架构反汇编)
- 安装库:sudo apt install libcapstone-dev
- 示例(C 语言,需链接 -lcapstone):cs_open(CS_ARCH_X86, CS_MODE_64, & handle); cs_disasm(…); 循环打印 address/mnemonic/op_str。
五 实用技巧与排错
- 源码级对应
- 有调试信息时,用 objdump -d -S 或将 gdb 的 disassembly 与源码行映射(info line)联动分析,便于理解指令与源码关系。
- 语法风格
- AT& T 与 Intel 语法差异较大;在 objdump 用 -M intel,在 gdb 用 set disassembly-flavor intel 统一为 Intel 风格,阅读更直观。
- 地址与范围
- 若已知地址区间,优先用 objdump 的 –start-address/–stop-address 精确反汇编;在 gdb 中用 disassemble start,end 聚焦热点区域。
- 权限与文件类型
- 确保对目标文件有读取权限;对 stripped(已去符号)的二进制,反汇编可读性会下降,可结合调试信息或符号恢复工具。
- 架构与位宽
- 使用 ndisasm 时务必指定正确的位宽(-b 32 或 64);跨架构分析时,radare2/capstone 支持多架构,选择正确的 arch/mode。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: debian反汇编指令使用教程
本文地址: https://pptw.com/jishu/758051.html
