占坑,待写。
方法一:最笨最实在最原始法——手动修复重定向法
根据前面我们说的,有IID的情况下,把IAT填写好,写成正确的函数的起始头。然后使用scylla进行fix dump的时候就能识别到,然后就能把重定向的解决了。
栈顶(堆栈窗口最上面那个)就是ESP
首先我们先来认识一下什么是寄存器
认识寄存器
通用寄存器(General Purpose Registers)
- EAX(累加寄存器,Accumulator Register):
- 通常用于算术运算和逻辑运算。
- 在函数调用中,一般用来保存返回值。
- EBX(基址寄存器,Base Register):
- 常用于基址寻址。
- 可以用来存储数据和指针。
- ECX(计数寄存器,Count Register):
- 常用于循环计数和字符串操作。
- EDX(数据寄存器,Data Register):
- 常用于存放扩展的算术运算结果,如乘法和除法的结果。
- 在32位系统中与EAX结合进行64位的运算。
指针与索引寄存器(Pointer and Index Registers)
- ESI(源索引寄存器,Source Index):
- 通常用于字符串操作,指向源数据地址。
- EDI(目标索引寄存器,Destination Index):
- 通常用于字符串操作,指向目标数据地址。
- ESP(堆栈指针寄存器,Stack Pointer):
- 指向当前堆栈的顶部。
- 用于堆栈操作,如PUSH和POP指令。
- EBP(基址指针寄存器,Base Pointer):
- 通常用于保存栈帧的基址,便于访问局部变量和函数参数。
段寄存器(Segment Registers)
- CS(代码段寄存器,Code Segment):
- 保存当前代码段的基址。
- DS(数据段寄存器,Data Segment):
- 保存当前数据段的基址。
- SS(堆栈段寄存器,Stack Segment):
- 保存当前堆栈段的基址。
- ES(额外段寄存器,Extra Segment):
- 通常用于字符串操作的额外段。
- FS和GS:
- 附加的段寄存器,可以用于任意用途。
EIP(指令指针寄存器,Instruction Pointer)
- EIP 指向下一条将要执行的指令的地址。
- 不可直接修改,通常通过控制流指令(如JMP、CALL、RET)间接改变。
- 对于程序的控制流至关重要。
标志寄存器(Flags Register)
- EFLAGS 保存了CPU的状态信息,包括条件码和控制标志。
- ZF(Zero Flag):结果为零时置位。
- CF(Carry Flag):进位或借位时置位。
- SF(Sign Flag):结果为负时置位。
- OF(Overflow Flag):溢出时置位。
- IF(Interrupt Enable Flag):中断使能位。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容