|
发表于 2022-6-4 18:46:46
|
显示全部楼层
广西壮族自治区崇左市
本帖最后由 项目部006 于 2022-6-4 18:49 编辑
这个是硬编码, 看这个笔记对你应该没多大帮助.....
因为有些东西你没学过都不知道怎么来的
寄存器顺序
000 001 010 011 100 101 110 111
0 1 2 3 4 5 6 7
al cl dl bl ah ch dh bh
eax ecx edx ebx esp ebp esi edi
0000 0001 0010 0011 0100 0101 0110 0111
0 1 2 3 4 5 6 7
1000 1001 1010 1011 1100 1101 1110 1111
8 9 A B C D E F
10 101 100 [内存 + dis32 4个字节偏移]
m ch [esp]
mov ch, byte ptr ds:[esp+0x78563412]
mod reg rm
11 000 000
rm类型 寄存器 寄存器/内存
01 = add Ev, Gv
7B = 0111 1011对应mod
mod reg rm
01 111 011
mod 01 = [内存 + 1字节偏移], 由此得出, 这个01(add)是3个字节
reg 111 = 7号寄存器, edi
rm 011 = 3号寄存器, [ebx] mod=01, 表示这个是内存
add dword ptr ds:[ebx + 0x9f], edi
0x9f 转成有符号字节是 -0x61, 所以也可以写成
add dword ptr ds:[ebx - 0x61], edi
所以 01 7b 9f 被翻译成 add dword ptr ds:[ebx - 0x61], edi
ev,eb = 内存
gb,gv = 寄存器
88 mov eb, gb rm/eb放前面, reg/gb放后面 eb=rm, gb=reg
89 mov ev, gv rm/ev放前面, reg/gv放后面 ev=rm, gv=reg
8a mov gb, eb reg放前面, rm放后面
8b mov gv, ev reg放前面, rm放后面
mod == 11 rm->r r=寄存器
mod == 00/01/10 rm=m m=内存
mod == 01 [内存 + 1字节偏移]
mod == 10 [内存 + dis32 4个字节偏移]
mov [xx + xx], xx
如果 mod == 00 rm==5(ebp) ebp 变成 dis(32)
38 cmp eb, gb
mod reg, rm
01 101 001
ch [ecx+dis8]
cmp byte ptr ds:[ecx+dis8], ch
32 xor gb, eb
mod reg, rm
xor ah, dl
11 100 010
32 e2
30 xor eb, gb
mod reg, rm
xor ah, dl
11 010 100
30 d4
32 xor gb, eb
mod reg, rm
11 011 011
bl bl
xor bl, bl
29 sub ev, gv
mod reg, rm
01 011 101
ebx [ebp+dis8]
sub dword ptr ds:[ebp+dis8], ebx
20 and eb, gb
mod reg, rm
10 110 101
dh [ebp+dis32]
and byte ptr ds:[ebp+dis32], dh
sbb edx, dword ptr ds:[ebp+dis8]
1b sbb gv, ev
mod reg, rm
01 010 101
edx ebp
sbb edx, dword ptr ds:[ebp+dis8]
1a sbb gb, eb
mod gb, eb
10 011 000
bl [eax+dis32]
sbb byte ptr ds:[eax+dis32], bl
[+dis8] edx [edx]
adc dword ptr ds:[edx+dis8], edx
13 adc gv, ev
mod gv, ev
01 010 010
[+dis8] edx [edx]
adc dword ptr ds:[edx+dis8], edx
08 or eb, gb
09 or ev, gv
0a or gb, eb
0b or gv, ev
09 or ev, gv
mod gv, ev
10 110 110
[+dis32] esi esi
0a or gb, eb
mod gb, eb
01 010 011
[+dis8] dl [bl]
or dl, [ebx+dis8]
or dl, [ebx+0x12]
0a 53 12
10 df
10 or eb, gb
mod eb, gb
11 011 111
[+dis8] dl [bl]
or dl, [ebx+dis8]
or dl, [ebx+0x12]
0a 53 12
[+dis32] esi esi
03 add gv, ev
mod gv, ev
00 100 101
[] esp [ebp]
add [ebp], esp
88 mov eb, gb
mod reg rm
11 011 100
88 dc
8a mov gb, eb
mod reg rm
11 100 001
8a e1
[] dh ebx
8a 01 110 011
8a 73 12
mod reg rm
[] dh ebx
8a 01 110 011
8a 73 12
mod reg rm
[] dl esi
8a 00 010 110
8a 16
10 110 110 [内存 + dis32 4个字节偏移]
m esi, esi
mov esi, dword ptr ds:[esi+0x12345678]
01 010 010
m edx [edx+0x12]
mov dword ptr ds:[edx+0x12], edx
mov byte ptr ds:[esi + 0x12], al
10 000 111
m al [esi+0x78563412]
mov byte ptr ds:[edi+0x78563412], al
10 101 011
m ebp [ebx+0x78563412]
mov dword ptr ds:[ebx+0x78563412], ebp
一条指令可以对应很多种编码
一个编码只能对应一条指令
|
评分
-
查看全部评分
|