基于DSP处理器特点的指令集静态反汇编方法.pdf

上传人:GAME****980 文档编号:9236419 上传时间:2021-05-11 格式:PDF 页数:17 大小:819.79KB
收藏 版权申诉 举报 下载
基于DSP处理器特点的指令集静态反汇编方法.pdf_第1页
第1页 / 共17页
基于DSP处理器特点的指令集静态反汇编方法.pdf_第2页
第2页 / 共17页
基于DSP处理器特点的指令集静态反汇编方法.pdf_第3页
第3页 / 共17页
文档描述:

《基于DSP处理器特点的指令集静态反汇编方法.pdf》由会员分享,可在线阅读,更多相关《基于DSP处理器特点的指令集静态反汇编方法.pdf(17页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010166987.X (22)申请日 2020.03.11 (71)申请人 电子科技大学 地址 611731 四川省成都市高新区 (西区) 西源大道2006号 (72)发明人 王坚陈哲李玉柏李桓 郭世泽 (74)专利代理机构 成都正华专利代理事务所 (普通合伙) 51229 代理人 李蕊 (51)Int.Cl. G06F 8/53(2018.01) (54)发明名称 一种基于DSP处理器特点的指令集静态反汇 编方法 (57)摘要 本发明公开了一种基于DSP处理器特点的指 。

2、令集静态反汇编方法, 包括以下步骤: S1: 建立数 据文件格式分析库和二进制映射汇编数据库; S2: 读出二进制数据, 得到原始二进制数据; S3: 根据数据文件格式分析库处理原始二进制数据, 得到属于程序段的二进制代码数据; S4: 采用静 态反汇编法对二进制代码数据进行反汇编, 得到 对应的汇编指令; S5: 对汇编指令添加分支标识 符, 完成DSP处理器的静态反汇编。 该方法将对运 行于DSP处理器平台的二进制代码进行反汇编, 获得汇编级的代码。 本发明为了适应DSP处理器 的特点, 对反汇编的过程做出了改进与适应, 同 时为了提升反汇编的正确性, 加入了汇编检测, 保证了反汇编的效率。

3、和准确率。 权利要求书2页 说明书9页 附图5页 CN 111399852 A 2020.07.10 CN 111399852 A 1.一种基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 包括以下步骤: S1: 建立数据文件格式分析库和二进制映射汇编数据库; S2: 基于数据文件格式分析库和二进制映射汇编数据库, 读出储存在DSP处理器片外非 易失性存储器的二进制数据, 得到原始二进制数据; S3: 根据数据文件格式分析库处理原始二进制数据, 得到属于程序段的二进制代码数 据; S4: 根据二进制映射汇编数据库, 采用静态反汇编法对二进制代码数据进行反汇编, 得 到对应的汇编指令;。

4、 S5: 对汇编指令添加分支标识符, 完成DSP处理器的静态反汇编。 2.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S1中, 根据TI的官方bootloader手册建立数据文件格式分析库, 其包括二进制代 码数据的结构信息、 自启动表和块头数据的位置信息; 根据TI的官方指令集建立二进制映射汇编数据库, 其形式为操作码值+固定值+指令模 板。 3.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S2中, 若二进制数据存储在片外EPPROM, 则通过I2C通信从EPPROM拷贝二进制数据 到片内的RAM, 利用。

5、CCS工具的打印数据功能复制片内的二进制数据, 形成数据文件, 得到原 始二进制数据; 若二进制数据存储在片外Flash, 则通过EMIF通信从Flash拷贝二进制数据到片内的 RAM, 利用CCS工具的打印数据功能复制片内的二进制数据, 形成数据文件, 得到原始二进制 数据。 4.根据权利要求2所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S3包括以下子步骤: S31: 根据数据文件格式分析库中的自启动表和块头数据的位置信息, 分离原始二进制 数据中的表头数据, 得到中间文件; S32: 根据数据文件格式分析库中的代码块分布信息, 处理中间文件, 得到属于程序段 。

6、的二进制代码数据。 5.根据权利要求4所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S32中, 通过段代码信息建立地址空间, 将本段的二进制数据逐条填入地址空间, 与每个地址一一对应, 得到形式为地址+二进制代码的输出文件, 所述输出文件包含需要进 行反汇编的二进制代码数据以及对应的地址信息。 6.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S4包括以下子步骤: S41: 对二进制代码数据进行逐条扫描; S42: 判断二进制代码数据是否为库中代码, 若是则进入步骤S43, 否则返回步骤S41; S43: 执行代码翻译程序,。

7、 得到完整的汇编指令。 7.根据权利要求6所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S42中, 判断方法为: 将二进制代码数据截取成长度为7Bit的操作码段, 与二进制 映射汇编数据库的操作码一一比对, 直至找到相同的操作码后进入步骤S43, 否则保持原有 权利要求书 1/2 页 2 CN 111399852 A 2 代码形式返回步骤S41; 所述步骤S43中, 将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比 对确定, 翻译成一条完整的汇编指令。 8.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法, 其特征在于, 所述步骤S5包括以下。

8、子步骤: S51: 建立一个记录分支指令所指向的目标地址及其标号的空间, 标号形式为label1、 label2、 、 labeln; S52: 基于空间, 遍历汇编指令, 找到分支指令; S53: 将分支指令所指向的目标地址与已记录在案的分支地址进行对比; S54: 判断目标地址是否使用过, 若是则进入步骤S56, 否则进入步骤S55; S55: 记录分支指令所指向的地址, 行成对应的新标号; S56: 将分支指令所指向的目标地址替换为对应标号; S57: 判断遍历是否完成, 若是则得到所有分支指令所指向的目标地址及其标号, 进入 步骤S58, 否则返回步骤S52; S58: 再次遍历汇编指。

9、令, 根据步骤S57得到的目标地址信息, 将对应的分支指令标识符 添加到对应地址的指令前, 直至遍历结束, 完成DSP处理器的静态反汇编。 权利要求书 2/2 页 3 CN 111399852 A 3 一种基于DSP处理器特点的指令集静态反汇编方法 技术领域 0001 本发明属于硬件安全技术领域, 具体涉及一种基于DSP处理器特点的指令集静态 反汇编方法。 背景技术 0002 反汇编技术在目前的安全领域中具有重要的作用。 当前反汇编算法包括线性扫描 反汇编算法与行进递归反汇编算法。 0003 线性扫描算法首先根据代码入口点以及代码段的规模设置分析起始地址与分析 结束地址, 然后从设置好的分析起。

10、始地址开始进行反汇编, 接着根据起始位置与结束地址 的限制对代码段中所有内容进行扫描。 线性扫描算法在扫描过程中不利用控制流信息引导 反汇编引擎的前进, 对扫描过程中遇到的每条指令均逐条按照顺序进行反汇编。 当遇到无 法解析的指令时, 算法终止或者从下一个字节处继续反汇编。 线性扫描算法的优点是实现 简单和快速, 其缺点在于: 在冯诺依曼体系结构下, 无法准确区分数据与代码, 可能导致线 性扫描算法将代码段中嵌入的数据解释为指令的操作码, 从而得到错误的反汇编结果。 目 前, 采用线性扫描算法的反汇编器主要包括Objdump、 WinDbg和SoftIC等。 0004 相比线性扫描算法, 行进。

11、递归算法也是首先根据代码入口点以及代码段的规模设 定分析起始地址与分析结束地址, 通过起始地址与结束地址对分析范围加以限制。 不同的 是, 行进递归算法在反汇编过程中利用控制流信息来确定反汇编的下一条指令, 按照代码 可能的实际执行路径来反汇编代码, 对每条可能的执行路径均进行扫描。 解析过程中遇到 非控制转移指令时进行顺序反汇编, 而遇到控制转移指令时则先利用静态分析技术确定代 码可能跳转的转移目的地址集合, 再从转移目的地址处继续进行反汇编。 行进递归算法可 以在一定程度上对数据和代码进行区分。 行进递归算法的缺点在于难以准确确定间接转移 目的地址。 目前采用行进递归算法的反汇编工具主要有。

12、W32Dasm和IDA Pro等。 0005 虽然目前反汇编发展速度十分快, 但是大部分的反汇编技术都是针对X86处理器 的, DSP处理器有与X86处理器不同的内部结构, 而专门针对DSP处理器的反汇编算法和相关 技术少之又少, 并且通过文献检索, 尚未发现公开的针对DSP处理器的二进制代码的反汇编 工具。 发明内容 0006 本发明的目的是为了解决DSP处理器反汇编算法的问题, 提出了一种基于DSP处理 器特点的指令集静态反汇编方法。 0007 本发明的技术方案是: 一种基于DSP处理器特点的指令集静态反汇编方法包括以 下步骤: 0008 S1: 建立数据文件格式分析库和二进制映射汇编数据。

13、库; 0009 S2: 基于数据文件格式分析库和二进制映射汇编数据库, 读出储存在DSP处理器片 外非易失性存储器的二进制数据, 得到原始二进制数据; 说明书 1/9 页 4 CN 111399852 A 4 0010 S3: 根据数据文件格式分析库处理原始二进制数据, 得到属于程序段的二进制代 码数据; 0011 S4: 根据二进制映射汇编数据库, 采用静态反汇编法对二进制代码数据进行反汇 编, 得到对应的汇编指令; 0012 S5: 对汇编指令添加分支标识符, 完成DSP处理器的静态反汇编。 0013 本发明的有益效果是: 本发明提出了一种基于DSP处理器特点的指令集静态反汇 编方法, 该。

14、方法将对运行于DSP处理器平台的二进制代码进行反汇编, 获得汇编级的代码。 本发明为了适应DSP处理器的特点, 对反汇编的过程做出了改进与适应, 同时为了提升反汇 编的正确性, 加入了汇编检测, 保证了反汇编的效率和准确率。 0014 进一步地, 步骤S1中, 根据TI的官方bootloader手册建立数据文件格式分析库, 其 包括二进制代码数据的结构信息、 自启动表和块头数据的位置信息; 0015 根据TI的官方指令集建立二进制映射汇编数据库, 其形式为操作码值+固定值+指 令模板。 0016 上述进一步方案的有益效果是: 在本发明中, 建立数据库属于反汇编流程的准备 工作, 建立好的数据库。

15、作为输入, 可指导整个反汇编流程的顺利进行。 0017 进一步地, 步骤S2中, 若二进制数据存储在片外EPPROM, 则通过I2C通信从EPPROM 拷贝二进制数据到片内的RAM, 利用CCS工具的打印数据功能复制片内的二进制数据, 形成 数据文件, 得到原始二进制数据; 0018 若二进制数据存储在片外Flash, 则通过EMIF通信从Flash拷贝二进制数据到片内 的RAM, 利用CCS工具的打印数据功能复制片内的二进制数据, 形成数据文件, 得到原始二进 制数据。 0019 上述进一步方案的有益效果是: 在本发明中, 由于数据是存储在DSP处理器片外的 非易失性存储器中, 所以需要从中。

16、读取出来。 并针对存储在不同片外位置的二进制数据采 用了不同通信方式的读取方法。 0020 进一步地, 步骤S3包括以下子步骤: 0021 S31: 根据数据文件格式分析库中的自启动表和块头数据的位置信息, 分离原始二 进制数据中的表头数据, 得到中间文件; 0022 S32: 根据数据文件格式分析库中的代码块分布信息, 处理中间文件, 得到属于程 序段的二进制代码数据。 0023 上述进一步方案的有益效果是: 在本发明中, 反汇编的目标是存储在片外非易失 性存储器中的代码数据, 它是由可行执行文件.out文件经过工具转换而来的, .out文件包 含了文件头、 段头信息以及各个段的数据, 其中。

17、各个段(Section)的数据正是DSP处理器可 以识别的二进制机器码, 在转换过程中.hex文件只保留了这些数据, 同时加上了诸如启动 信息表和块头等启动信息。 而反汇编只针对二进制机器码, 因此需要把这些不需要的信息 剔除。 0024 进一步地, 步骤S32中, 通过段代码信息建立地址空间, 将本段的二进制数据逐条 填入地址空间, 与每个地址一一对应, 得到形式为地址+二进制代码的输出文件, 所述输出 文件包含需要进行反汇编的二进制代码数据以及对应的地址信息。 0025 上述进一步方案的有益效果是: 在本发明中, 为二进制数据加上与之对应的地址 说明书 2/9 页 5 CN 1113998。

18、52 A 5 信息, 便于后续二进制映射汇编数据库进行识别翻译。 0026 进一步地, 步骤S4包括以下子步骤: 0027 S41: 对二进制代码数据进行逐条扫描; 0028 S42: 判断二进制代码数据是否为库中代码, 若是则进入步骤S43, 否则返回步骤 S41; 0029 S43: 执行代码翻译程序, 得到完整的汇编指令。 0030 上述进一步方案的有益效果是: 在本发明中, 二进制代码反汇编就是把处理过后 的二进制数据进行反汇编的过程, 采取的是静态反汇编法进行扫描并翻译, 翻译实际是一 个搜索的过程, 可将程序翻译成完整的汇编指令。 0031 进一步地, 步骤S42中, 判断方法为:。

19、 将二进制数据的汇编代码截取成长度为7Bit 的操作码段, 与二进制映射汇编数据库的操作码一一比对, 直至找到相同的操作码后进入 步骤S43, 否则保持原有代码形式返回步骤S41; 0032 步骤S43中, 将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比 对确定, 翻译成一条完整的汇编指令。 0033 上述进一步方案的有益效果是: 在本发明中, 判断方法可以对二进制数据的汇编 代码进行逐条扫描, 能保证对每条汇编代码都进行了反汇编。 0034 进一步地, 步骤S5包括以下子步骤: 0035 S51: 建立一个记录分支指令所指向的目标地址及其标号的空间, 标号形式为 label1、 。

20、label2、 、 labeln; 0036 S52: 基于空间, 遍历汇编指令, 找到分支指令; 0037 S53: 将分支指令所指向的目标地址与已记录在案的分支地址进行对比; 0038 S54: 判断目标地址是否使用过, 若是则进入步骤S56, 否则进入步骤S55; 0039 S55: 记录分支指令所指向的地址, 行成对应的新标号; 0040 S56: 将分支指令所指向的目标地址替换为对应标号; 0041 S57: 判断遍历是否完成, 若是则得到所有分支指令所指向的目标地址及其标号, 进入步骤S58, 否则返回步骤S52; 0042 S58: 再次遍历汇编指令, 根据步骤S57得到的目标地。

21、址信息, 将对应的分支指令标 识符添加到对应地址的指令前, 直至遍历结束, 完成DSP处理器的静态反汇编。 0043 上述进一步方案的有益效果是: 在本发明中, 每个DSP处理器指令集都存在分支指 令, 这个指令的作用是实现程序的跳转, 而在汇编代码中, 指令的跳转需要标识符予以辅 助, 添加标识符能让整个汇编代码更具可读性。 附图说明 0044 图1为静态反汇编方法的流程图; 0045 图2为ADD指令格式的示意图; 0046 图3为中间文件内容的示意图; 0047 图4为步骤S4的流程图; 0048 图5为步骤S5的流程图; 0049 图6为B指令的示意图。 说明书 3/9 页 6 CN 。

22、111399852 A 6 具体实施方式 0050 下面结合附图对本发明的实施例作进一步的说明。 0051 如图1所示, 本发明提供了一种基于DSP处理器特点的指令集静态反汇编方法, 包 括以下步骤: 0052 S1: 建立数据文件格式分析库和二进制映射汇编数据库; 0053 S2: 基于数据文件格式分析库和二进制映射汇编数据库, 读出储存在DSP处理器片 外非易失性存储器的二进制数据, 得到原始二进制数据; 0054 S3: 根据数据文件格式分析库处理原始二进制数据, 得到属于程序段的二进制代 码数据; 0055 S4: 根据二进制映射汇编数据库, 采用静态反汇编法对二进制代码数据进行反汇 。

23、编, 得到对应的汇编指令; 0056 S5: 对汇编指令添加分支标识符, 完成DSP处理器的静态反汇编。 0057 本发明的有益效果是: 本发明提出了一种基于DSP处理器特点的指令集静态反汇 编方法, 该方法将对运行于DSP处理器平台的二进制代码进行反汇编, 获得汇编级的代码。 0058 在本发明实施例中, 如图1所示, 步骤S1中, 根据TI的官方bootloader手册建立数 据文件格式分析库, 其包括二进制代码数据的结构信息、 自启动表和块头数据的位置信息; 0059 根据TI的官方指令集建立二进制映射汇编数据库, 其形式为操作码值+固定值+指 令模板。 0060 在本发明中, 建立数据。

24、库属于反汇编流程的准备工作, 建立好的数据库作为输入, 可指导整个反汇编流程的顺利进行。 0061 针对数据文件格式分析库, 启动数据的信息可以从各个型号处理器的bootloader 手册中查询。 同时需要获得自启动表的起始地址和长度以及代码数据的起始地址和长度信 息, 来填入二进制数据格式分析库中。 0062 针对二进制映射汇编数据库, 对于不同型号的处理器, 其指令集是不同的, 但对其 的分析是一致的。 目前TI官方公布的指令集如表1所示, 它包含了TI生产的各种型号的DSP 处理器。 0063 表1 说明书 4/9 页 7 CN 111399852 A 7 0064 0065 下面以TM。

25、S320C64x/C64x+指令系统为例阐述如何建立数据库。 0066 如图2所示是一条ADD指令的指令格式。 从格式中得知, 这是一条32位长的指令, 这 条指令被分成六个部分, creg+z域代表的是这条指令的条件判断信息, dst+src2+src1域代 表的是这条指令的操作数, op域代表的是这条指令的操作码, bit2-4是这条指令的固定值, x+s+p分别代表了交叉通道的开启、 路径的选择以及并行的信息, 这三个域都有关于DSP处 理器独特的双通道结构, 而其他处理器没有, 因此对指令集的分析需要针对型号。 而它们一 致的信息是操作码值+固定值, 这两个域的值代表了这条指令位是哪一。

26、条指令, 因此需要提 取这两个域的信息形成数据库。 二进制映射汇编数据库的形式为操作码值+固定值+指令模 板, 以上面ADD指令为例, 它在数据库中的值为0000011110ADD.L xsint sint sint, 因为操 作数和条件判断域的值是可以随意改变的, 因此不纳入数据库的记录中, 需要通过后面的 系统进行实时的判断。 0067 在本发明实施例中, 如图1所示, 步骤S2中, 若二进制数据存储在片外EPPROM, 则通 过I2C通信从EPPROM拷贝二进制数据到片内的RAM, 利用CCS工具的打印数据功能复制片内 的二进制数据, 形成数据文件, 得到原始二进制数据; 0068 若二。

27、进制数据存储在片外Flash, 则通过EMIF通信从Flash拷贝二进制数据到片内 说明书 5/9 页 8 CN 111399852 A 8 的RAM, 利用CCS工具的打印数据功能复制片内的二进制数据, 形成数据文件, 得到原始二进 制数据。 0069 在本发明中, 在本发明中, 由于数据是存储在DSP处理器片外的非易失性存储器 中, 所以需要从中读取出来。 并针对存储在不同片外位置的二进制数据采用了不同通信方 式的读取方法。 0070 在本发明实施例中, 如图1所示, 步骤S3包括以下子步骤: 0071 S31: 根据数据文件格式分析库中的自启动表和块头数据的位置信息, 分离原始二 进制数。

28、据中的表头数据, 得到中间文件; 0072 S32: 根据数据文件格式分析库中的代码块分布信息, 处理中间文件, 得到属于程 序段的二进制代码数据。 0073 在本发明中, 反汇编的目标是存储在片外非易失性存储器中的代码数据, 它是由 可行执行文件.out文件经过工具转换而来的, .out文件包含了文件头、 段头信息以及各个 段的数据, 其中各个段(Section)的数据正是DSP处理器可以识别的二进制机器码, 在转换 过程中.hex文件也只保留这些数据, 同时加上了诸如启动信息表和块头等启动信息。 而反 汇编只针对二进制机器码, 因此需要把这些不需要的信息剔除。 0074 下面对原始二进制数。

29、据处理过程中文件内容的变化进行说明。 由图3可以看出, 删 除了自启动表头和块头数据后, 中间文件只包含了数据文件中的.hex部分, 其余部分均被 删除。 中间文件由三部分组成: 第一个32bit数据是程序的入口地址, 即c_int00的地址, c_ int00是运行支持库中的一个重要函数, 是程序初始化的入口; 最后一个32bit数据则是启 动代码的结束标志; 中间部分是整个中间文件主体, 它存放的是每个段代码的信息。 以 Section n为例, size代表的是此段在RAM运行中所占的大小, dest代表的是此段在RAM运行 时的首地址, 而data则代表的是这个段中的数据。 因此把de。

30、st值作为一个段的首地址, 通过 size计算这个段的大小空间, 由于每条指令长度为4bytes, 即每个地址也相隔4bytes, 通过 这个方法建立了地址空间后, 把这个段的数据逐条按顺序填入这个空间中, 和每个地址一 一对应。 完成以上步骤后, 输出的文件格式是地址+二进制代码的文件格式。 0075 在本发明实施例中, 如图3所示, 步骤S32中, 通过段代码信息建立地址空间, 将本 段的二进制数据逐条填入地址空间, 与每个地址一一对应, 得到形式为地址+二进制代码的 输出文件, 所述输出文件包含需要进行反汇编的二进制代码数据以及对应的地址信息。 0076 在本发明中, 为二进制数据加上与。

31、之对应的地址信息, 便于后续二进制映射汇编 数据库进行识别翻译。 0077 在本发明实施例中, 如图4所示, 步骤S4包括以下子步骤: 0078 S41: 对二进制代码数据进行逐条扫描; 0079 S42: 判断二进制代码数据是否为库中代码, 若是则进入步骤S43, 否则返回步骤 S41; 0080 S43: 执行代码翻译程序, 得到完整的汇编指令。 0081 在本发明中, 二进制代码反汇编就是把处理过后的二进制数据进行反汇编的过 程, 采取的是静态反汇编法进行扫描并翻译, 翻译实际是一个搜索的过程, 可将程序翻译成 完整的汇编指令。 0082 在本发明实施例中, 如图4所示, 步骤S42中,。

32、 判断方法为: 将二进制代码数据截取 说明书 6/9 页 9 CN 111399852 A 9 成长度为7Bit的操作码段, 与二进制映射汇编数据库的操作码一一比对, 直至找到相同的 操作码后进入步骤S43, 否则保持原有代码形式返回步骤S41; 0083 步骤S43中, 将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比 对确定, 翻译成一条完整的汇编指令。 0084 在本发明中, 判断方法可以对二进制数据的汇编代码进行逐条扫描, 能保证对每 条汇编代码都进行了反汇编。 0085 在本发明实施例中, 如图5所示, 步骤S5包括以下子步骤: 0086 S51: 建立一个记录分支指令所指。

33、向的目标地址及其标号的空间, 标号形式为 label1、 label2、 、 labeln; 0087 S52: 基于空间, 遍历汇编指令, 找到分支指令; 0088 S53: 将分支指令所指向的目标地址与已记录在案的分支地址进行对比; 0089 S54: 判断目标地址是否使用过, 若是则进入步骤S56, 否则进入步骤S55; 0090 S55: 记录分支指令所指向的地址, 行成对应的新标号; 0091 S56: 将分支指令所指向的目标地址替换为对应标号; 0092 S57: 判断遍历是否完成, 若是则得到所有分支指令所指向的目标地址及其标号, 进入步骤S58, 否则返回步骤S52; 0093。

34、 S58: 再次遍历汇编指令, 根据步骤S57得到的目标地址信息, 将对应的分支指令标 识符添加到对应地址的指令前, 直至遍历结束, 完成DSP处理器的静态反汇编。 0094 在本发明中, 每个DSP处理器指令集都存在分支指令, 这个指令的作用是实现程序 的跳转, 而在汇编代码中, 指令的跳转需要标识符予以辅助, 添加标识符能让整个汇编代码 更具可读性。 0095 下面对分支标识符的添加进行举例说明。 0096 例如B指令就是一条分支指令, 它在反汇编后的格式为B.S1 0 x00000000,后面的 0 x00000000其实对应的是需要跳转的地址值, 所以需要将0 x00000000转成标。

35、识符, 然后添 加到对应地址的指令前, 如图6所示为B指令的label, 在没转换前它的地址值为 0 x0000000C,转换成label后再添加到0 x0000000C地址所示的指令前。 0097 下面结合实例对本发明进行验证实验。 0098 实验采用EVMC6474作为实验对象, 实验板已事先装载好了led程序。 首先需要确立 研究对象, EVMC6474装载的是TI的TMS320C6474 DSP处理器, 通过编写I2C读写程序获取了 存储在EPPROM里的led程序, 这个程序的形式是以二进制数据的形式呈现的。 根据分析, 获 取到的二进制数据由以下几部分组成。 第一部分是自启动表头,。

36、 这是指导DSP从EPPROM复制 数据到RAM进行执行的数据块, 这对于获取起始地址信息有很大帮助; 第二部分是各个块的 块头, 存储在EPPROM的数据都是以块的形式存储的, 除了第一个块没有块头外, 后面的块都 有块头, 用于指示数据是否结束。 另外, CMD文件的映射也会反映在二进制数据中。 根据分析 得知, 一个段的开始往往先以表示其起始地址以及数据长度的二进制数据开始, 后面跟随 的才是二进制代码, 以此建立二进制数据结构分析库以指导原始数据的处理。 0099 下面介绍的是二进制映射汇编数据库的建立。 通过TI官网文档得知, 64x/64x+指 令分为32bit指令和16bit指令。

37、, 其次DSP处理器都是以包的形式处理指令的, 一次传输一个 包进行处理, 每个包包含8条32bit的数据, 当出现16bit指令时, 这个包的最后一条指令必 说明书 7/9 页 10 CN 111399852 A 10 定为包头指令, 用于区分前面7条数据哪些为32bit, 哪些为16bit, 若这个包没有16bit指 令, 则无包头指令。 所以将数据库分成32bit指令以及16bit指令。 0100 通常情况一条汇编指令有以下几部分元素, Label: parallelcondition opcode.unit operand。 Label是分支标识符, 这是分支指令的跳转标志地址, 一般。

38、只在分支 指令指向此条指令时才会出现这个标识符。 Parallel是并行标识符, 出现指令并行时则为| |, 否则省略。 Condition是条件判断, 若不进行条件判断则省略。 Opcode为操作指令, Unit为 执行单元, Operand为操作数。 0101 下面以ADD指令为例, 阐述如何建立数据库。 从TI官方文档分析得, 一条32bit指令 最重要的是op域和固定位, 它们的组合往往告知了这条32bit数据代表的是哪条指令, 其余 的域也很重要, 但它是可变的, 例如DSP处理器有A0A31和B0B31两组寄存器, 这就代表 了dst、 src1和src2这三个域的值不同代表的寄存。

39、器也不同。 所以数据库中只存能代表指令 的值: 操作码值+固定位, 从图2看就是op+110, 其中0000011110就代表ADD.L src1,src2, dst这条指令, 至于汇编指令的其他元素以及具体使用的寄存器, 可以采用实时分析的方法 获得, 并不存储在数据库中。 0102 数据库建立好之后, 就开始按步骤对获取的二进制数据进行反汇编。 首先进行原 始数据处理, 在进行原始数据处理时, 由于实验对象有两种长度的指令, 在进行地址分配 时, 需先进行包头的解析, 把这组包含16bit指令的包进行解析, 再进行地址的分配。 输出的 是地址+二进制代码形式的文件。 完成了原始数据处理后,。

40、 对二进制代码进行反汇编工作。 反汇编工作总体来说有两个过程, 第一是判断此条数据是否为库中代码, 方法是获取此条 数据某些数据域的值与数据库中的值进行比对, 看是否存在, 例如获取到2-11位的数据为 0000011110, 通过对比数据库会发现是上述ADD指令。 第二个过程是指令其余元素的翻译, creg和z域确立的是condition的值, x和s域确立的是unit的值, 而dst、 src1和src2具体使 用哪些寄存器由它们本身的值以及x和s域决定, p域的值代表的是下一条指令是否并行, 所 以说当前指令的并行标志parallel需由上一条指令的p值决定, 这就是为什么数据库只存 关。

41、键数据, 其余值由当前数据分析得来的原因。 0103 最后一步是遍历所有翻译完成的汇编代码, 其目的有两个。 第一个是检错纠错, 例 如某些指令只能在.S2单元上执行, 但却翻译成了.S1或者其它, 这就需要进行修正, 重新对 这一条数据进行翻译, 再翻译是寻找此条数据所有的可能指令形式, 若仍然错误, 则还原为 数据形式输出。 更多的检错机制需要自行匹配DSP处理器的特点。 第二个目的是给分支指令 添加label标识符, 当分支指令的跳转地址不在分配的地址范围内时, 也需要进行检错纠 错。 当此过程完成后, 输出的才是最终的汇编指令代码文件。 0104 如表2所示为本实验的结果。 0105 。

42、表2 0106 文件大小反汇编速度反汇编正确率 90.5KB2Mb/min99 0107 最后实验结果表明, 反汇编正确率在99以上, 不能达到完全一致是因为个别指 令有完全一致的二进制代码, 例如MV.D src2 dst和OR.D 0src2 dst, 但它们在逻辑上是等 价的, 并不会因此影响汇编代码的逻辑。 0108 本发明的工作原理及过程为: DSP处理器采用的是哈佛结构, 其程序和数据分开存 说明书 8/9 页 11 CN 111399852 A 11 储。 在这体系结构下的处理器首先到程序指令存储器中读取指令内容, 解码后得到数据地 址, 再到相应的数据存储器中读取数据, 然后执。

43、行这一操作。 基于其程序和数据分开的特 点, 对其进行反汇编时可以直接使用线性反汇编算法, 逐条对指令进行翻译, 而不用排除数 据的混入。 0109 本发明的有益效果为: 本发明提出了一种基于DSP处理器特点的指令集静态反汇 编方法, 该方法将对运行于DSP处理器平台的二进制代码进行反汇编, 获得汇编级的代码。 本发明为了适应DSP处理器的特点, 对反汇编的过程做出了改进与适应, 同时为了提升反汇 编的正确性, 加入了汇编检测, 保证了反汇编的效率和准确率。 0110 本领域的普通技术人员将会意识到, 这里所述的实施例是为了帮助读者理解本发 明的原理, 应被理解为本发明的保护范围并不局限于这样。

44、的特别陈述和实施例。 本领域的 普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各 种具体变形和组合, 这些变形和组合仍然在本发明的保护范围内。 说明书 9/9 页 12 CN 111399852 A 12 图1 图2 说明书附图 1/5 页 13 CN 111399852 A 13 图3 说明书附图 2/5 页 14 CN 111399852 A 14 图4 说明书附图 3/5 页 15 CN 111399852 A 15 图5 说明书附图 4/5 页 16 CN 111399852 A 16 图6 说明书附图 5/5 页 17 CN 111399852 A 17 。

展开阅读全文
内容关键字: 基于 DSP 处理器 特点 指令 静态 汇编 方法
关于本文
本文标题:基于DSP处理器特点的指令集静态反汇编方法.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/9236419.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1