调试反汇编(Disassembly)通常指在没有源代码的情况下,通过反汇编器和调试器分析程序行为、定位问题或理解逻辑。以下是系统化的调试方法与工具指南:
| 工具 | 平台 | 特点 |
|---|---|---|
| IDA Pro | Win/Linux/macOS | 最强静态反汇编,支持调试插件 |
| Ghidra | 跨平台 | NSA 开源,免费,支持反编译 |
| x64dbg / x32dbg | Windows | 用户态调试,界面友好 |
| OllyDbg | Windows | 经典 32 位调试器 |
| GDB | Linux | 命令行调试,支持反汇编 |
| Radare2 / Cutter | 跨平台 | 开源逆向框架 |
| Hopper | macOS/Linux | macOS 逆向常用 |
EntryPoint(PE header)main / WinMain_start → __libc_start_main → mainCtrl + Einfo file断点类型:
| 类型 | 用途 |
|---|---|
| 代码断点 | 停在指定指令 |
| 内存断点 | 读写某块内存 |
| 硬件断点 | 不修改代码,适合反调试 |
| 条件断点 | 满足特定条件触发 |
示例(GDB):
b *0x401000
b *main
watch *0x12345678
快捷键示例:
F7 / F8 / Ctrl + F9si / ni / finishEAX / RAX / RBX / RCXESP / RSPEIP / RIPZF / CF / SF(判断跳转)call / retjmp / je / jne / jz / jnzcmp eax, ebx
je label_true
| 调用约定 | 参数传递 | 清理栈 |
|---|---|---|
| cdecl | 栈 | 调用者 |
| stdcall | 栈 | 被调用者 |
| fastcall | 寄存器 | 被调用者 |
| x64 ABI | RCX, RDX, R8, R9 | 被调用者 |
strings 命令GetProcAddressVirtualAllocCreateFileIsDebuggerPresentCheckRemoteDebuggerPresentpush ebp
mov ebp, esp
mov eax, [ebp+8] ; 参数1
add eax, 10
pop ebp
ret
调试时关注:
EBP+8 是第一个参数EAX 是返回值ret 返回调用者如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。