【逆向】第三章 寄存器及汇编基础

文章目录


前言

【逆向】第三章 寄存器及汇编基础

“把字母和编号记住,主要用途可以不计,杯子推荐用来装水并不意味着不能装酒”
这是8个32位寄存器

一、用OD打开一个exe

紫色高亮的那一条就是cpu执行的那个位置,按下F8以后,便会往下执行一行。
右键一条代码,assemble键入如下汇编指令

mov eax,0x1

在汇编中mov是移动的意思,后面eax是前言里32位寄存器的名字,在汇编里数字前加一个0x表示16进制,执行后如下图

【逆向】第三章 寄存器及汇编基础
1叫源操作数,eax叫目标操作数,mov把后面那个值放入eax这个寄存器里面

mov ecx,0x123456

可以执行

mov edx,0x123456789

写了九个,但是是32位寄存器,所以这时候从9开始往前面存,1就舍弃掉了

mov eax,0x1
mov ecx,0x123456
mov edx,0x123456789

这三个指令,设此时eax前面是高亮段,按F8,右边eax值为1,再按一次exc为123456,再按一次edx为98765432

二、通用寄存器及mov指令

寄存器都是CPU里面的

1.通用寄存器表

【逆向】第三章 寄存器及汇编基础
16位跟32位的名字差一个E,8位寄存器,16位和32位结构:

2.通用寄存器结构

【逆向】第三章 寄存器及汇编基础
AX就是EAX中间砍一刀,也就是说AX就是EAX里面,EAX后,一半就是AX
16位寄存器再从中间砍一半就是8位寄存器,如AX,前面高位8 ~ 15就是AH,后面0 ~ 7就是AL

3.代码演示

汇编语言不停移动数据,在内存与寄存器,在寄存器与寄存器之间不停移动数据,数据移动越复杂,程序就越复杂

代码移动示例

mov eax,0xAAAAAAAA
mov ax,0xBBBB
mov ah,0xDD
mov al,0xEE

键入代码后如下图
【逆向】第三章 寄存器及汇编基础
第一次按下F8,闪到ax,结果如图
【逆向】第三章 寄存器及汇编基础
第二次按下F8,闪到Ah结果如图
【逆向】第三章 寄存器及汇编基础
第三次按下F8,闪到AL,结果如图

【逆向】第三章 寄存器及汇编基础
第四次按下F8,结果如图
【逆向】第三章 寄存器及汇编基础
再次键入如下代码,把eax的值放入ecx

mov ecx,eax

按下F8
【逆向】第三章 寄存器及汇编基础

4.mov语句语法

mov的语法如下:
【逆向】第三章 寄存器及汇编基础
r/m8:r表示通用寄存器,m表示内存/8,表示8位寄存器或8位内存
如mov ch,al,把al移到ch都是8位寄存器,可行
其他的同理
mov cx,1=mov cx,0001
mov指令是第一条汇编指令,但是其他汇编指令和它差不多
下图位海哥对mov的总结
【逆向】第三章 寄存器及汇编基础

三、其他汇编指令

【逆向】第三章 寄存器及汇编基础

1.add指令

【逆向】第三章 寄存器及汇编基础
键入如下代码:
【逆向】第三章 寄存器及汇编基础
执行结果:
【逆向】第三章 寄存器及汇编基础
按下F8【逆向】第三章 寄存器及汇编基础

2.sub指令

【逆向】第三章 寄存器及汇编基础
键入sub eax,0x2后并执行的情况
【逆向】第三章 寄存器及汇编基础

3.and指令

与运算:and(汇编) &(C)

mov eax,0x2
and eax,0x3

结果为2,运算原理是将2和3转化为二进制,然后一位一位地进行与

4.or指令

mov eax,0x2
and eax,0x3
or eax,0x3

结果为3,原理同and指令

5.xor指令

原理同上,进行xor运算

6.not指令

原理同上,进行not运算
【逆向】第三章 寄存器及汇编基础

总结

提示:这里对文章进行总结:
以上就是今天讲的内容,注意CPU里的寄存器,及寄存器的关系,指令的语法格式

上一篇:dea中默认的debug模式的设置


下一篇:[转]IDEA断点调试基础