1. 主要目的:
查找出错误的函数
查找函数内某个出错参数
2. 适用情况
比较适合于使用第三方库或者其他dll文件时,无法进入使用函数内部的情况。
3. 注意点:
call函数:函数的返回值能够反映函数调用情况,如果出错,则一般为函数返回值异常,函数返回值存放于EAX中。
出错代码:VS中函数执行完成后会返回出错代码,出错代码可能为宏定义值,此时可以结合源码(如果有的话),IDA反汇编出dll,具体一一对应。
汇编查看跳转:如果判定条件为≥,那么在汇编中的跳转指令可能是<。
4. 基础知识:
1) 指令
ret:跳转会调用函数的地方。对应于call,返回到对应的call调用的下一条指令,若有返回值,则放入eax中;
xor:异或指令,这本身是一个逻辑运算指令,但在汇编指令中通常会见到它被用来实现清零功能。用xor eax,eax这种操作来实现mov eax,0,可以使速度更快,占用字节数更少。
lea:取得第二个参数地址后放入到前面的寄存器(第一个参数)中。lea也同样可以实现mov的操作,例如: lea edi,[ebx-0ch],方括号表示存储单元,也就是提取方括号中的数据所指向的内容,然而lea提取内容的地址,这样就实现了把(ebx-0ch)放入到了edi中,但是mov指令是不支持第二个操作数是一个寄存器减去一个数值的。
stos:串行存储指令,它实现把eax中的数据放入到edi所指的地址中,同时edi后移4个字节,这里的stos实际上对应的是stosd,其他的还有stosb,stosw分别对应1,2个字节。
jmp:无条件跳转指令,对应于大量的条件跳转指令。
jg:条件跳转,大于时成立,进行跳转,通常条件跳转之前会有一条比较指令(用于设置标志位)。
jl:小于时跳转。
jge:大于等于时跳转。
cmp:比较大小指令,结果用来设置标志位。
汇编跳转指令记忆
比较数目大小的 J == jump 比较标志位的 C&nbs |