汇编语言的准备知识,第1张

汇编语言的准备知识,第2张

汇编语言连接CPU、内存、端口等硬件知识。这就是汇编语言不通用的原因。下面简单说一下基础知识(针对INTEL x86及其兼容电脑)

x86语言中的指令对CPU、系统内存或立即数上的寄存器进行操作。有些指令表面上没有操作数,或者看起来缺少操作数。其实指令是有默认操作数的,比如push指令,必须是SS:ESP指定的内存操作,而cdq的操作对象必须是eax/edx。

在汇编语言中,寄存器是通过名字来访问的。有几种类型的CPU寄存器,它们有不同的用途:

1.通用寄存器:
EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP(虽然这是通用的,但除了堆栈指针之外很少用于其他用途)

这32位可以有多种用途,但每一位都有“专长”..它是许多加法和乘法指令的默认寄存器。EBX是“基址”(base)寄存器,在寻址存储器时存储基址。ECX是柜台。它是重复(REP)前缀指令和循环指令的默认计数器。EDX群岛...(忘记了..哈哈)但是总是用来放整数除法产生的余数。这四个寄存器的低16位可以分别访问,低8位(AL)和高8位(AH)、BX、CX可以分别使用AX、BX和DX访问。分别是AX。DX也差不多。函数的返回值通常放在EAX中。

ESI/EDI分别称为“源/目的地索引”,因为在很多字符串操作指令中,DS:ESI指向源字符串,而ES:EDI指向目标字符串。

EBP是“基指针”,最常用作高级语言函数调用的“框架指针”。破解的时候经常可以看到一个标准的函数启动代码:

push ebp;保存当前ebp
mov ebp,espEb设置为当前堆栈指针
sub esp,xxxXxx字节是为函数临时变量保留的。
...

这样,EBP就构成了一个功能框架。原EBP,返回地址和参数在EBP上面,临时变量在EBP下面。当函数返回时,它被称为movsep。Eb/pop ebp/ret都可以。

ESP专门用作堆栈指针。2 .
。段寄存器:
CS(代码段)指定当前正在执行的代码段。EIP(指令指针,指令指针)指向段中的特定指令。中央处理器将执行EIP指向的指令。一般只有jmp、ret、jnz、call等指令可以用来改变程序流程,但不能直接赋值。
DS(数据段)指定数据段。注意:在目前的计算机系统中,代码和数据没有本质的区别。它是一串二进制数。区别只在于你怎么用。比如CS制定的段总是作为代码使用,一般不可能通过CS指定的地址来修改段。但是,您可以为同一个段申请一个数据段描述符“别名”,并通过DS访问/修改它。自行修改代码的程序经常会这样做。
ES,FS,GS是一个辅助段寄存器,它指定附加的数据段。
SS(STACK SEGMENT)指定当前堆栈段。ESP表示该段中的当前栈顶。所有push/pop系列指令仅在SS:ESP指示的地址上运行。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 汇编语言的准备知识

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情