【逆向】第三章 寄存器及汇编基础
作者:互联网
文章目录
前言
“把字母和编号记住,主要用途可以不计,杯子推荐用来装水并不意味着不能装酒”
这是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里的寄存器,及寄存器的关系,指令的语法格式
标签:逆向,通用寄存器,第三章,F8,mov,eax,指令,寄存器 来源: https://blog.csdn.net/qq_46441427/article/details/112491708