第4章 x86反汇编速成

1 抽象层次

image.png

硬件
微指令
机器码
低级语言
高级语言
解释型语言

2 逆向工程

x86 intel IA-32
可参考《汇编语言的编程艺术》

3 x86体系结构

  • 中央处理器 CPU
  • 内存 RAM
  • IO 硬盘 键盘鼠标 显示器


    image.png

3.1 内存

image.png

数据 数据节 静态值
代码 CPU要执行的指令
堆 动态内存 在程序执行过程中动态的分配和释放
栈 保存局部变量和参数,控制程序流程

3.2 指令

3.3 操作码和字节序

image.png

x86采用小端字节序 0x42在内存为42 00 00 00
网络数据 采用 大端字节序

3.4 操作数

  • 立即数 就是固定的数 如0x42
  • 寄存器 如ecx
  • 内存地址 [eax]

3.5 寄存器

寄存器
image.png

通用寄存器

EAX

标志寄存器

ZF 当结果为0时,ZF=1
CF 当目标操作数存不下结果时(过大或过小),CF=1
SF 结果为负 SF=1, 对于算术运算,当运算结果的最高位为1时,SF位也会 被置1
TF 用于调试,当TF=1时,x86架构处理器每次只执行一条指令
可参考《Intel 64 and IA-32架构软件开发者手册》

EIP

保存着下一条要执行的指令在内存中的地址

简单指令

mov指令
mov eax,ebx
mov eax,0x42
mov eax,[0x4037C4]
mov eax,[ebx]
mov eax,[ebx+esi*4]

lea指令(load effective address)
lea destination,source
lea eax,[ebx+8] ;将ebx+8的值赋值给eax
该指令可用于计算表达式
lea ebx,[eax*5+5];等价于ebx=eax*5+5



算术运算

add destination,value
sub destination,value 若结果为0,ZF=1,或value > destination,CF=1

add eax,ebx
sub eax,0x10
inc edx
dec ecx

mul value 将eax乘以value,EDX存结果的高32位,EAX存结果的低32位
div value EDX:EAX除以value,EDX存高32位,EAX存低32位,商存储在EAX中,余数存储在EDX中
imul 和 idiv是它们有有符号数的版本


image.png
xor eax,eax 将EAX快速置0

移位操作符
shr destination,count 右移位
shl destination,count 左移位
移出的目的操作数边界上位会先移动到CF标志位上,在移位中,用填充新的位
ror destination,count 右循环移位 用移出的位填充另一端空出的位
rol destination,count 左循环移位

shl eax,n 相当eax=eax*2^n

在加密和压缩函数中会大量使用
xor,or,and,shl,shr,ror,rol这样的指令


image.png

nop指令
这条指令什么也不做,操作码为0x90,可用于填充代码

先入先出的数据结构
EBP 栈基址
ESP 指向栈顶的指针
栈在内存中是自顶向下的 底在上,顶在下
相关指令有 push,pop,call,leave,enter,ret
pusha,pushad将所有的寄存器压入栈
popa,popad弹出栈


image.png

3.8 条件指令

test 同and指令但不会修改操作数 test eax,eax用于测试eax是否为0,为0为ZF=1
cmp 比较指令 同sub指令,但不改变操作数


image.png

3.9 分支指令

jmp location 无条件跳转


条件跳转

3.10 重复指令

用于操作数组
movsx
cmpsx
stosx
scasx
其中x可以是b,w,d,分别代码字节(8位),字(16位),双字(32位)
相关的寄存器
ESI 源索引寄存器
EDI 目的索引寄存器
ECX 用作计数
这些指令需要与前缀指令配合使用


前缀

举例
rep movsb 等价于C语言中memcpy函数
movsb将ESI指向的字节移动到EDI指向的地址,若DF=0,则ESI和EDI加1,若DF=1,则同时减1,直到ECX为0

repz cmpsb 等价于C语言中的memcmp函数
cmpsb会逐一比较ESI和EDI指向的字节,并设置标志位,直到ECX=0(比较到头了)或者ZF=0(ESI和EDI指向的数据不一致)

repne scasb 从一串字节中检索一个值,这个值由AL给出,将ESI指向的值与AL逐一作比较,直到找到该字节或ECX=0

image.png

image.png

3.11 C语言主函数和偏移

C代码

汇编代码

3.12

若遇到不认识的指令可参考
可在intel官网上查询

4 小结

实践出真知

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 1.地址总线,数据总线,控制总线在哪里,它们有什么作用?答:它们都是cpu连接外部组件的线路。地址总线:地址总线A...
    MagicalGuy阅读 1,450评论 0 1
  • 汇编基础教程 16位和32位的80x86汇编语言的区别 需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应...
    inwunwe阅读 9,500评论 2 19
  • 1. 堆栈操作 1). 运行时栈 PUSH 操作 作用:32位PUSH操作将堆栈指针递减4并将值复制到该位置堆栈指...
    _凌浩雨阅读 2,332评论 0 5
  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys阅读 3,318评论 0 2
  • 转载自http://www.th7.cn/Program/IOS/201408/266681.shtml 在导入框...
    叶舞清风阅读 1,208评论 0 1