x86机器码识别及其反汇编算法

本文介绍了x86体系结构中机器码的识别和反汇编算法,包括prefixes、code、ModR/M等六域的解析过程。重点讲解了prefixes的5种类别及其识别,code的哈弗曼编码特性,以及如何通过二维表格进行code识别。此外,还提到了堆栈操作的注意事项和效率问题。
摘要由CSDN通过智能技术生成
x86机器码识别及其反汇编算法 x86体系结构CPU的每条指令都可能由以下六个域组成,并且它们在指令中的排列顺序是不能改变的。 这六个域分别是: prefixes code ModR/M SIB displacement immediate 在任何一条指令中code域是必须出现的,其他的域都是可选的。 由于这六个域在指令中的排列顺序是固定的,所以反汇编机器码,就是一个对它们的依次识别过程。 1.对prefixes的识别 Intel的官方手册上说有4类prefixes,为了便于编程和后面的描述,本人将prefixes分成了5类。 x86体系结构CPU的5类prefixes,它们分别为: lock prefix :F0 repeat prefixes :F2,F3 segment override prefixes :2E,36,3E,26,64,65 operand-size override prefix :66 address-size override prefix :67 指令的prefixes可以由这5类prefixes组成,但是每类prefixes只能在指令中出现一次,至于每类prefixes在指令的出项顺序是没有要求的,这点和指令的六个域是不同的。当某类prefixes在同一指令中出现多次的时候,CPU在执行过程中,可能会出现不可预料的结果,至于会不会出现异常,Intel的官方手册中只用了这句话来说明:such use may cause unpredictable behavior.鬼知道会出项什么情况,因此算法必须对这类机器码具有识别能力。但是也可能异常情况不会发生,在反汇编过程,遇到同一类prefixes出现多次的情况,以最后出现的prefix为准,进行机器码识别。 prefixes识别的核心代码: for( ; nSizeOfCode > 0; nSizeOfCode--, pCode++) { IsPrefix = 1; //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值