Ollydebug界面上有四个窗口,分别是
1、反汇编窗口:地址,机器码,反汇编代码,注释
2、寄存器窗口
3、数据窗口
4、堆栈窗口
L:log M:memory W:window H:Handle C:cpu K:堆栈
调试:
F2设置删除断点
F7,类似VC中的F10,进入代码
F8:类似F11
F9:运行调试程序,直到断点处
寄存器:
ESP:指向堆栈最顶端的地址
EIP:指向当前将要执行的指令
(可以通过右键modify修改这个值,然后在commanderbar中显示AL AH BX等)
标志寄存器:
O:溢出标志,可以在反汇编窗口右键assemble修改命令,在寄存器窗口修改寄存器的值。
A:辅助进位标志
P:奇偶标志,1的总数为偶数,p置位0。eg;1100,1010,此时p为0。
Z:零标志,当结果为0时,被置位。为1
S:符号标志,当运算结果为负,设置成1
C:进位标志,无符号进位
PUSHAD指令把所有通用寄存器的内容按一定顺序压入到堆栈中,PUSHAD也就相当于
’PUSH EAX,PUSH ECX,PUSH EDX,PUSH EBX,PUSH ESP,PUSH EBP,PUSH ESI, PUSH EDI’。
POPAD
该指令与PUSHAD正好相反,它从堆栈中取值,并将它们放到相应的寄存器中。
POPAD等价于“POP EDI,POP ESI,POP ESP,POP ESP,POP EBX,POP EDX,POP ECX,POP EAX”。
PUSHAD-POPAD指令经常被使用,例如:某个时刻你需要保存所有寄存器的内容,然后修改寄存器的值,或者进行堆栈的相关操作,然后使用POPAD恢复它们原来的状态。