关闭

逆向与汇编的一些笔记

909人阅读 评论(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文件中是不会保存的,重启程序后将丢失断点。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:952520次
    • 积分:11655
    • 等级:
    • 排名:第1304名
    • 原创:371篇
    • 转载:42篇
    • 译文:0篇
    • 评论:130条
    最新评论