【汇编】RAX,eax,ax,ah,al 关系
bash
|63..32|31..16|15-8|7-0|
|AH.|AL.|
|AX.....|
|EAX............|
|RAX...................|
一般寄存器 :AX(2字节)
、BX
、CX
、DX
AX
:累积暂存器,BX
:基底暂存器,CX
:计数暂存器,DX
:资料暂存器
索引暂存器:SI、DI
SI
:来源索引暂存器,DI
:目的索引暂存器
堆叠、基底暂存器:SP、BP
SP
:堆叠指标暂存器,BP
:基底指标暂存器
EAX(4字节)、ECX、EDX、EBX :為ax,bx,cx,dx的延伸,各為32位元
ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元
eax
, ebx
, ecx
, edx
, esi
, edi
, ebp
, esp
等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。
比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。
这些32位寄存器有多种用途,但每一个都有"专长",有各自的特别之处。
-
EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
-
EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。
-
ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
-
EDX 则总是被用来放整数除法产生的余数。
ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.
EBP 是"基址指针
"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:
bash
push ebp ;保存当前ebp
mov ebp,esp ;EBP设为当前堆栈指针
sub esp, xxx ;预留xxx字节给函数临时变量.
...
这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作
bash
mov esp,ebp
pop ebp
ret
即可.
ESP
专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。
除次之外 就是 RAX, RAX是 EAX的64位版本(8字节)。同理 ,其他的都有64位版本
bash
x86.dbg
779193C8 | B0 0B | mov al,B | al 表示的是EAX的第一个字节 低字节 低8位
779193CA | 66:B8 CDAB | mov ax,ABCD | AX是EAX首2个字节空间
779193CE | B8 563412AB | mov eax,AB123456 | 4个字节操作
779193D3 | B8 00000000 | mov eax,0 | 4个字节
779193D8 | B4 1F | mov ah,1F | ah 表示的是eax的第二字节 高字节 高8位
779193DA | 90 | nop |
779193DB | 90 | nop |
779193DC | B3 0B | mov bl,B | 0B:'\v'
779193DE | 66:BB 8F19 | mov bx,198F |
779193E2 | BB 21436587 | mov ebx,87654321 | 一个字节 00---FF
779193E7 | B7 AB | mov bh,AB |
779193E9 | 90 | nop |
779193EA | 90 | nop |
779193EB | 90 | nop |
779193EC | B2 21 | mov dl,21 |
779193EE | 66:BA 2143 | mov dx,4321 |
779193F2 | BA 21436587 | mov edx,87654321 |
779193F7 | B6 AB | mov dh,AB |
x64.dbg
00007FF89B3ECBC5 | B2 21 | mov dl,21 | 指令 *
00007FF89B3ECBC7 | 66:BA 2143 | mov dx,4321 |
00007FF89B3ECBCB | BA 21436587 | mov edx,87654321 |
00007FF89B3ECBD0 | 48:BA 2143658799EFCDAB | mov rdx,ABCDEF9987654321 |
00007FF89B3ECBDA | B6 AB | mov dh,AB |
00007FF89B3ECBDC | BA 4E61BC00 | mov edx,BC614E |
00007FF89B3ECBE1 | BA 78563412 | mov edx,12345678 | 清空高位为0
00007FF89B3ECBE6 | C7C2 78563412 | mov edx,12345678 |