反汇编引擎编写

我的源码,GitHub链接https://github.com/coNgY1/XqDisassembler

参考资料:https://www.pediy.com/kssd/pediy12/128411.html

写着写着忘了自己写的初衷,变成了真的只能打印反汇编语句了。写这个的时候还没有用过udis8等反汇编引擎,所以对于需求理解不到位,没有把结构中添加分析出来的MODR/M,SIB,以及PARMARY OPCODE部分

最近有点浮躁,花了几天时间写一个反汇编引擎,到现在除了SSE指令集还没有支持,浮点数和X86的常见的都支持了,看手册写表有点太累了~~~如果以后有SSE的需求再补上吧。。。

写的时候记录的一些东西,以后需要增加SSE时候看看

ONEBYTE 特殊部分:
0x60:PUSHAD    PUSHA
0x61:POPAD    POPA
0x6D:INSD    INSW
0x6E:OUTSD    OUTSW        
0xA5:MOVSD    MOVSW
0xA7:CMPSD    CMPSW
0x98:CWDE    CBW
0x99:CDQ    CWD
0x9C:PUSHFD    PUSHF
0x9D:POPFD    POPF
0xAB:STOSD    STOSW
0xAD:LODSD    LODSW
0xAF:SCASD    SCASW
0xCF:IRETD    IRET
0x9A这个CALL FAR指令
0xF3+0x90 = PAUSE
LOCK前缀没处理

LES/LDS-C4/C5指令的FWORD和DWORD转换

66前缀:    寄存器32->16
    ModRM的disp32还是disp32,只是要加上word ptr
    imm32变为imm16    ->Iz变为Iw
67前缀:
    ModRM的E表更换一下为16位的寄存器
    只影响寻址,不影响立即数imm


浮点数指令的大小描述
single-real    dword ptr,有St(x)    --66不影响
double-inter    dword ptr,有st(x)    --66不影响
double-real    qword ptr,有st(x)    --66不影响
2BYTES        word ptr 没有St(x)    --66不影响
extended-read    tword,有st(x)    --66不影响
14/28bytes    m28/m14没有st(x)    --66会变成m14
interger64    qword ptrE表,st(x)    --66不影响
98/108bytes    no
word-inter    word ptr,st(x)    --66不影响
packed-BCD    tword ptr        --66不影响
qword-inter    qword ptr    --66不影响

猜你喜欢

转载自blog.csdn.net/a893574301/article/details/83031805