逆向与汇编的一些笔记

原创 2013年12月04日 22:29:59

寄存器

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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

逆向工程破解软件的一些汇编命令

请看下图,这是OD右上角窗口的“寄存器窗口”,我们先说说这个。 通用寄存器有8个,分别是: EAX ECX EDX EBX ESP EBP ESI EDI 寄存器后面的数字,就是寄存器里储存的数...

c&c++反汇编与逆向分析学习笔记(8)--除法表达式

除法运算对应的汇编指令分为有符号idiv和无符号div两种。除法指令的执行周期较长,效率也低,所以编译器想尽办法用其他运算指令代替除法指令。C++中的除法和数学中的除法不同。在C++中,除法运算不保留...

c&c++反汇编与逆向分析学习笔记(5)--加法的求值过程和编译器优化

学了逆向分析之后,发现,虽然我们写了程序,但是程序并不是按完全按照我们写的代码一句 一句执行的,很有可能一大部分代码都被编译器优化修改了。只有了解这些东西,我们才能写出 性能更加优益,可读性与精炼...

Android逆向基础笔记—Android中的常用ARM汇编指令

Android中的反编译是,我们常常会用到一些ARM汇编指令。这里我收集一些,供大家参考。

pe逆向入门笔记一汇编指令学习及crackme初体验

pe逆向入门笔记一 汇编指令学习及crackme初体验 push略 pop指令 如 执行  pop eax 则栈顶的数会传给 eax这个寄存器 具体说明: 原来esp 地址为0019ff...

学习笔记(逆向汇编)Day6-Day10

记性不好,纯粹做个学习记录,以便日后复习。如有错误,还望指出。

c&c++反汇编与逆向分析学习笔记(1)--调试工具OllyDBG

我学习用的数据是钱松林和赵海合著的《C反汇编与逆向分析技术揭秘》,这本书绝对可以帮助程序员提高自己,修炼自己的内功。 在软件的开发过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误...
  • kyt511
  • kyt511
  • 2015-04-04 17:14
  • 2311

C++反汇编与逆向分析之数据类型的基本表现学习笔记

float GetFloat() { return 12.25f; } void Add(int &nVar) { nVar++; } int main(int argc, char* arg...

C++反汇编与逆向分析技术揭秘小笔记

题记:分析能力很大程度体现在分析效率上,语法细节乃至数据代码间的复杂性不应该成为主要困难   所谓逆向分析,不应该只是单纯的逆向代码,真正目标应该是逆向出代码作者的思维、意图 即透过代码分析意图...
  • xuqiqw
  • xuqiqw
  • 2012-06-29 20:23
  • 2293

c&c++反汇编与逆向分析学习笔记(3)--基本数据类型表现形式

千万不要小看这些数据类型,我相信你肯定不知道float型数在变参函数参数传值时发生了什么。 “小尾方式”在内存中存放数据,即按字节存放,高数据位存放在内存的低端,低数据位放在内存的高端。比如十六...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)