调试器(Debugger)
调试器可以帮助我们动态得跟踪程序运行状态,查看到达某一步时寄存器内容、变量内容等。调试分为白盒调试和黑盒调试,我们写程序之后运行调试属于白盒调试,而在反向工程中使用的调试就是黑盒调试。
区别黑盒调试的两个分支 用户模式和内核模式
- 用户模式:用户程序使用最基本的权限运行的模式
- 内核模式:最高权限模式,是操作系统运行核心功能时状态,比如驱动模块等。当使用Wireshark抓包时,就是在跟运行在内核状态的网卡驱动进行交互。
x86通用寄存器
8个通用寄存器:EAX
,EBX
,ECX
,EDX
,ESI
,EDI
,EBP
,ESP
- EAX–(accumulator register)是我们熟知的运算器,用于加、减、比较等运算,也用来存储函数调用的返回值。
- EDX–(data register)是EAX的扩展,在乘除运算中存储数据,也可用来作为一般的数据寄存器
- ECX–(count register)用于循环操作中计数,为递减的
- ESI和EDI S代表source,D代表Destination。一般ESI作为源地址,EDI作为目的地址。简单来说,可以用ESI对应地址作为输入,EDI对应地址作为输出
- ESP和EBP ESP(stack pointer)指向栈顶端,EBP(base pointer)指向栈基址。用他们来管理栈操作和函数调用
- EIP 是CPU中的IP寄存器,指向下一条指令地址
程序断点
程序断点分为3种:
1. 软程序断点(soft breakpoint)
2. 硬程序断点(hardware breakpoint)
3. 内存程序断点(memory breakpoint)