逆向与汇编的一些笔记

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

 

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

逆向常用汇编指令

cdq(Convert Double to Quad)功能: 将 EAX 扩展为 64 位数 EDX:EAX。该指令先把edx的每一位置成eax的最高位(若eax>=0x80000000, 则edx...
  • swjtu100
  • swjtu100
  • 2016年09月01日 21:49
  • 615

逆向与汇编的一些笔记

寄存器 EAX:累加寄存器 EBX:基址寄存器 ECX:计数寄存器 EDX:数据寄存器 ESI:来源寄存器 EDI:目标寄存器 EBP:基址指针寄存器 ESP:堆栈指针寄存器 EIP:指令指针寄存器 ...
  • SysProgram
  • SysProgram
  • 2013年12月04日 22:29
  • 1064

学习笔记(逆向汇编)Day1-Day5

本人健忘,特此记录学习过程
  • BeiJiaan
  • BeiJiaan
  • 2017年08月28日 22:09
  • 259

逆向汇编的基本知识梳理

第一部分:基础知识 汇编语言是一切程序的起点和终点,毕竟所有的高级语言都是建立在汇编基础之上的。在许多高级语言中我们都需要相对明确的语法,但是在汇编中,我们会使用一些单词缩写和数字来表达程序。 ...
  • shen_liang_sl
  • shen_liang_sl
  • 2017年01月25日 21:20
  • 390

逆向编程与反汇编的区别

最近看到逆向编程的问题,在此分享一下查找的结果 反汇编:一般是只对编译器根据高级语言生成的本机二进制可直接在芯片上执行的机器码”解析“为人类可读的汇编形式的代码(实际上最最早期的计算机操作员具备直...
  • aa2397199142
  • aa2397199142
  • 2015年09月16日 20:37
  • 4557

反汇编——逆向初步(1)

学破解,肯定要会逆向,要不然,堆着一大堆的反汇编代码,你只能摇头长叹。明知道里面有你需要的东西,却是不知该如何去挖掘,是一件很令人郁闷的事。好了,废话不多说了,下面我们开始学习逆向。     不知道...
  • shantikai
  • shantikai
  • 2015年01月23日 20:59
  • 282

170524 逆向-CrackMe(1)

1625-5 王子昂 总结《2017年5月24日》 【连续第235天总结】 A. CrackMe练习 01 B. Acid burn 看了一些论坛上的crackme,都无从下手 找到了这个练习包,参考...
  • whklhhhh
  • whklhhhh
  • 2017年05月24日 21:52
  • 222

IOS逆向之汇编语言程序入门

原文地址一、寻址方式1、概念:    一条指令由操作码和操作数构成,操作码是系统定义好的符号,执行指定的操作,操作数即是指令的对象,而寻址方式就是操作数的指定方式操作码 目的操作数,源操作数 2、...
  • qq_15807167
  • qq_15807167
  • 2017年08月12日 20:50
  • 401

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

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

《C++反汇编与逆向分析技术揭秘》附带源码

  • 2015年04月29日 15:12
  • 8.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:逆向与汇编的一些笔记
举报原因:
原因补充:

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