最新消息:本站技术交流 QQ 群:28124927

逆向与汇编的一些笔记

逆向与汇编 exchen 5235浏览 0评论

寄存器

EAX:累加寄存器
EBX:基址寄存器
ECX:计数寄存器
EDX:数据寄存器
ESI:来源寄存器
EDI:目标寄存器
EBP:基址指针寄存器
ESP:堆栈指针寄存器
EIP:指令指针寄存器

条件跳转指令

ja CF=0 and ZF=0
jab CF=0
jb CF=1
jbe CF=1 of ZF =1
jcxz CX=0
je ZF=1
jecxz ECX=0
jg ZF=0 and SF=OF
jge SF=OF
jl SF!=OF
jle ZF=1 or SF!=OF
jmp 无条件跳转
jna CF=1 or ZF=1
jnae CF=1
jnb CF=0
jnbe CF=0 and ZF=0
jnc CF=0
jne ZF=0
jng ZF=1 or SF!=OF
jnge SF!=OF
jnl SF=OF
jnle ZF=0 and SF=OF
jno OF=0
jnp PF=0
jns SF=0
jnz ZF=0
jo OF=1
jp PF=1
jpe PF=1
jpo PF=0
js SF=1
jz ZF=1

标志位

Z标志位(0标志),这个标志位是最常用的,运算结果为0时候,Z标志位置1,否则置0。
O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。
C标志位(进位标志),记录运算时从最高有效位产生的进位值。例如执行加法指令时,最高有效位有进位时置1,否则置0。

cmp指令大概有以下几种格式:

cmp eax, ebx ;如果相等,Z标志位置1,否则0.
cmp eax, [404000] ;将eax和404000地址处的dword型数据相比较并同上置位。
cmp [404000], eax ;同上。

test指令

test eax,eax ;如果eax的值为0,则Z标志位置1

逻辑运算

and eax,ebx
or eax,ebx
xor eax,ebx
not eax

CALL指令

call XXX; 等于 push eip; 然后 jmp XXX;
call有以下几点调用方式
call 404000h ;直接跳到函数或过程的地址
call eax ;函数或过程地址存放在eax
call dword ptr [eax]
call dword ptr [eax+5]
call dword ptr [<&API>] ;执行一个系统API

PE文件格式
PE文件结构:

DOS header
DOS stub
PE File Header
Image Optional Header
Section Table
Data Directories
Sections

GetModuleHandleA这个API函数用于获取程序的ImageBase(基址)
VA(VirtualAddress,虚拟地址)
RVA(RelativeVirtualAddress,相对虚拟地址)
EP(EntryPoint,程序入口点)

软件断点

设置该断点的原理是在断点处重写代码,插入一个int3中断指令,当CPU执行到int3指令的时候,OD就可以获得控制权。软件断点只能在OD的CPU界面下,在数据段它下不了,在一条指令的中间它也下不了。

硬件断点

这个原理跟软件断点不同,硬件断点的可行性依赖于CPU的物理支持。CPU有四个调试寄存器。如果我们想下在windows的动态链接库里下断点,需要用到硬件断点,因为用软件断点下在dll文件中是不会保存的,重启程序后将丢失断点。

转载请注明:exchen's blog » 逆向与汇编的一些笔记

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址