给定一个汇编字符串以字节为单位打印字节码以供 Radare 反汇编?
逆向工程
部件
x86
雷达2
x86-64
2021-06-17 16:06:01
2个回答
实际上,没有lea edx, [0x80490c8]64 位寻址模式。因为,afaik,在所有 64 位寻址模式中lea都是寄存器相关操作码。
LEA - 加载有效地址
计算第二个操作数(源操作数)的有效地址并将其存储在第一个操作数(目标操作数)中。源操作数是由处理器寻址模式之一指定的内存地址(偏移量部分);目标操作数是一个通用寄存器。来源:英特尔® 64 位和 IA-32 架构软件开发人员手册
无论如何,如果您想知道表示使用radare2 指令的字节码,您可以使用该pa命令。
在 32 位模式下,它看起来像这样:
[0x00000000]> e asm.bits=32
[0x00000000]> pa lea edx, [0x80490c8]
8d15c8900408
[0x00000000]> pad 8d15c8900408
lea edx, [0x80490c8]
在 64 位模式下,它看起来像这样:
[0x00000000]> e asm.bits=64
[0x00000000]> pa lea edx, [0x80490c8]
488d15c8900408
[0x00000000]> pad 488d15c8900408
lea rdx, [rip + 0x80490c8]
您可以看到radare2 知道lea edx, [0x80490c8]不能用64 位表示,因此它使用RIP 相对表达式。
32
radare2 -a x86 -b 32 -c "wa lea edx,[0x80490c8] ; pd 1 ; exit()" -
Written 6 byte(s) (lea edx,[0x80490c8]) = wx 8d15c8900408
0x00000000 8d15c8900408 lea edx, [0x80490c8]
-- Are you a wizard?
[0x00000000]> q
64
radare2 -a x86 -b 64 -c "wa lea edx,[rip+0x80490c8] ; pd 1 ; exit()" -
Written 7 byte(s) (lea edx,[rip+0x80490c8]) = wx 488d98c8900408
0x00000000 488d98c89004. lea rbx, [rax + 0x80490c8]
-- SHALL WE PLAY A GAME?
[0x00000000]> q