rasm2 每次为 x64 提供不同的输出

逆向工程 雷达2 x64
2021-06-12 04:53:13

反汇编很棒,但是当尝试重新汇编为操作码时,每次都会给出不同的结果。例子:

C:\>rasm2 -a x86 -b 64 -d "48898D80FEFFFF"  
mov qword [rbp - 0x180], rcx  
C:\>rasm2 -a x86 -b 64 "mov qword [rbp - 0x180], rcx"  
49898d80feffff  

看到不同?第一个字节已更改,并且每次都保持相同的行为。另一个问题是,我无法让它用 8 个字节组装这条指令,它只给我 4 个字节:

C:\>rasm2 -a x86 -b 64 -d "C7458C0000803F"  
mov dword [rbp - 0x74], 0x3f800000  
C:\>rasm2 -a x86 -b 64 "mov dword [rbp - 0x74], 0x3f800000"  
41c67400

但是当我删除位标志并将寄存器设置为 32 位时,它给了我正确的操作码!

C:\>rasm2 -a x86 "mov dword [ebp - 0x74], 0x3f800000"  
c7458c0000803f

为什么要这样做,我做错了什么?

GitHub 问题链接以供将来参考。

1个回答

这是一个错误,由 OP 打开的问题现在已在radare2 Master和最新版本上修复

$ rasm2 -a x86 -b 64 -d "48898D80FEFFFF"
mov qword [rbp - 0x180], rcx
$ rasm2 -a x86 -b 64 "mov qword [rbp - 0x180], rcx"
48898d80feffff

$ rasm2 -a x86 -b 64 -d "C7458C0000803F"
mov dword [rbp - 0x74], 0x3f800000
$ rasm2 -a x86 -b 64 "mov dword [rbp - 0x74], 0x3f800000"
c7458c0000803f

可以在此链接中找到修复程序