下你所需,载你所想!
汇集开发技术源码资料

开源一个x86汇编器/反汇编器

:63.432KB :1 :2020-02-01 15:30:06

部分简介

当前指令.Mnemonic = Instructions [指令索引].Mnemonic
当前指令.ArgCount = Instructions [指令索引].ParamCount
' 计算指令长度
.如果真 (当前指令.Segment ≠ #SegUnknown)
size = 取绝对值 (当前指令.Segment)
.如果真结束
.如果真 (Instructions [指令索引].Now3DByte > -1)
size = size + 取绝对值 (Instructions [指令索引].Now3DByte)
.如果真结束
size = Instructions [指令索引].OpCodeLen + size + BitCount (位或 (Instructions [指令索引].Prefixes, 当前指令.flags)) + 到整数 (Instructions [指令索引].ModRM) + 到整数 (isSIB)
.计次循环首 (Instructions [指令索引].ParamCount, i)
当前指令.Args [i].size = Instructions [指令索引].Parameters [i].size
当前指令.Args [i].Register = Instructions [指令索引].Parameters [i].Register
当前指令.Args [i].Value = Instructions [指令索引].Parameters [i].Value
.如果 (Instructions [指令索引].Parameters [i].Forced)
当前指令.Args [i].TType = Instructions [指令索引].Parameters [i].PType
.否则
' 非强制参数
.如果真 (Instructions [指令索引].Parameters [i].PType = 位或 (#ParamMem, #ParamReg)) ' 读取寄存器
.如果真 (Instructions [指令索引].ModRM)
.如果 (指令ModRm.Mod = 3)
当前指令.Args [i].TType = #ParamReg
.否则
当前指令.Args [i].TType = #ParamMem
MemIdx = i
.如果真 (指令ModRm.Mod = 0)
指令ModRm.DispSize = Instructions [指令索引].Parameters [i].size
指令ModRm.Disp = 读整数 (指令ModRm.DispSize)

开源一个x86汇编器/反汇编器

热门推荐

相关文章