CN111399852B - 一种基于dsp处理器特点的指令集静态反汇编方法 - Google Patents
一种基于dsp处理器特点的指令集静态反汇编方法 Download PDFInfo
- Publication number
- CN111399852B CN111399852B CN202010166987.XA CN202010166987A CN111399852B CN 111399852 B CN111399852 B CN 111399852B CN 202010166987 A CN202010166987 A CN 202010166987A CN 111399852 B CN111399852 B CN 111399852B
- Authority
- CN
- China
- Prior art keywords
- data
- binary
- instruction
- code
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于DSP处理器特点的指令集静态反汇编方法,包括以下步骤:S1:建立数据文件格式分析库和二进制映射汇编数据库;S2:读出二进制数据,得到原始二进制数据;S3:根据数据文件格式分析库处理原始二进制数据,得到属于程序段的二进制代码数据;S4:采用静态反汇编法对二进制代码数据进行反汇编,得到对应的汇编指令;S5:对汇编指令添加分支标识符,完成DSP处理器的静态反汇编。该方法将对运行于DSP处理器平台的二进制代码进行反汇编,获得汇编级的代码。本发明为了适应DSP处理器的特点,对反汇编的过程做出了改进与适应,同时为了提升反汇编的正确性,加入了汇编检测,保证了反汇编的效率和准确率。
Description
技术领域
本发明属于硬件安全技术领域,具体涉及一种基于DSP处理器特点的指令集静态反汇编方法。
背景技术
反汇编技术在目前的安全领域中具有重要的作用。当前反汇编算法包括线性扫描反汇编算法与行进递归反汇编算法。
线性扫描算法首先根据代码入口点以及代码段的规模设置分析起始地址与分析结束地址,然后从设置好的分析起始地址开始进行反汇编,接着根据起始位置与结束地址的限制对代码段中所有内容进行扫描。线性扫描算法在扫描过程中不利用控制流信息引导反汇编引擎的前进,对扫描过程中遇到的每条指令均逐条按照顺序进行反汇编。当遇到无法解析的指令时,算法终止或者从下一个字节处继续反汇编。线性扫描算法的优点是实现简单和快速,其缺点在于:在冯诺依曼体系结构下,无法准确区分数据与代码,可能导致线性扫描算法将代码段中嵌入的数据解释为指令的操作码,从而得到错误的反汇编结果。目前,采用线性扫描算法的反汇编器主要包括Objdump、WinDbg和SoftIC等。
相比线性扫描算法,行进递归算法也是首先根据代码入口点以及代码段的规模设定分析起始地址与分析结束地址,通过起始地址与结束地址对分析范围加以限制。不同的是,行进递归算法在反汇编过程中利用控制流信息来确定反汇编的下一条指令,按照代码可能的实际执行路径来反汇编代码,对每条可能的执行路径均进行扫描。解析过程中遇到非控制转移指令时进行顺序反汇编,而遇到控制转移指令时则先利用静态分析技术确定代码可能跳转的转移目的地址集合,再从转移目的地址处继续进行反汇编。行进递归算法可以在一定程度上对数据和代码进行区分。行进递归算法的缺点在于难以准确确定间接转移目的地址。目前采用行进递归算法的反汇编工具主要有W32Dasm和IDA Pro等。
虽然目前反汇编发展速度十分快,但是大部分的反汇编技术都是针对X86处理器的,DSP处理器有与X86处理器不同的内部结构,而专门针对DSP处理器的反汇编算法和相关技术少之又少,并且通过文献检索,尚未发现公开的针对DSP处理器的二进制代码的反汇编工具。
发明内容
本发明的目的是为了解决DSP处理器反汇编算法的问题,提出了一种基于DSP处理器特点的指令集静态反汇编方法。
本发明的技术方案是:一种基于DSP处理器特点的指令集静态反汇编方法包括以下步骤:
S1:建立数据文件格式分析库和二进制映射汇编数据库;
S2:基于数据文件格式分析库和二进制映射汇编数据库,读出储存在DSP处理器片外非易失性存储器的二进制数据,得到原始二进制数据;
S3:根据数据文件格式分析库处理原始二进制数据,得到属于程序段的二进制代码数据;
S4:根据二进制映射汇编数据库,采用静态反汇编法对二进制代码数据进行反汇编,得到对应的汇编指令;
S5:对汇编指令添加分支标识符,完成DSP处理器的静态反汇编。
本发明的有益效果是:本发明提出了一种基于DSP处理器特点的指令集静态反汇编方法,该方法将对运行于DSP处理器平台的二进制代码进行反汇编,获得汇编级的代码。本发明为了适应DSP处理器的特点,对反汇编的过程做出了改进与适应,同时为了提升反汇编的正确性,加入了汇编检测,保证了反汇编的效率和准确率。
进一步地,步骤S1中,根据TI的官方bootloader手册建立数据文件格式分析库,其包括二进制代码数据的结构信息、自启动表和块头数据的位置信息;
根据TI的官方指令集建立二进制映射汇编数据库,其形式为操作码值+固定值+指令模板。
上述进一步方案的有益效果是:在本发明中,建立数据库属于反汇编流程的准备工作,建立好的数据库作为输入,可指导整个反汇编流程的顺利进行。
进一步地,步骤S2中,若二进制数据存储在片外EPPROM,则通过I2C通信从EPPROM拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据;
若二进制数据存储在片外Flash,则通过EMIF通信从Flash拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据。
上述进一步方案的有益效果是:在本发明中,由于数据是存储在DSP处理器片外的非易失性存储器中,所以需要从中读取出来。并针对存储在不同片外位置的二进制数据采用了不同通信方式的读取方法。
进一步地,步骤S3包括以下子步骤:
S31:根据数据文件格式分析库中的自启动表和块头数据的位置信息,分离原始二进制数据中的表头数据,得到中间文件;
S32:根据数据文件格式分析库中的代码块分布信息,处理中间文件,得到属于程序段的二进制代码数据。
上述进一步方案的有益效果是:在本发明中,反汇编的目标是存储在片外非易失性存储器中的代码数据,它是由可行执行文件.out文件经过工具转换而来的,.out文件包含了文件头、段头信息以及各个段的数据,其中各个段(Section)的数据正是DSP处理器可以识别的二进制机器码,在转换过程中.hex文件只保留了这些数据,同时加上了诸如启动信息表和块头等启动信息。而反汇编只针对二进制机器码,因此需要把这些不需要的信息剔除。
进一步地,步骤S32中,通过段代码信息建立地址空间,将本段的二进制数据逐条填入地址空间,与每个地址一一对应,得到形式为地址+二进制代码的输出文件,所述输出文件包含需要进行反汇编的二进制代码数据以及对应的地址信息。
上述进一步方案的有益效果是:在本发明中,为二进制数据加上与之对应的地址信息,便于后续二进制映射汇编数据库进行识别翻译。
进一步地,步骤S4包括以下子步骤:
S41:对二进制代码数据进行逐条扫描;
S42:判断二进制代码数据是否为库中代码,若是则进入步骤S43,否则返回步骤S41;
S43:执行代码翻译程序,得到完整的汇编指令。
上述进一步方案的有益效果是:在本发明中,二进制代码反汇编就是把处理过后的二进制数据进行反汇编的过程,采取的是静态反汇编法进行扫描并翻译,翻译实际是一个搜索的过程,可将程序翻译成完整的汇编指令。
进一步地,步骤S42中,判断方法为:将二进制数据的汇编代码截取成长度为7Bit的操作码段,与二进制映射汇编数据库的操作码一一比对,直至找到相同的操作码后进入步骤S43,否则保持原有代码形式返回步骤S41;
步骤S43中,将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比对确定,翻译成一条完整的汇编指令。
上述进一步方案的有益效果是:在本发明中,判断方法可以对二进制数据的汇编代码进行逐条扫描,能保证对每条汇编代码都进行了反汇编。
进一步地,步骤S5包括以下子步骤:
S51:建立一个记录分支指令所指向的目标地址及其标号的空间,标号形式为label1、label2、…、labeln;
S52:基于空间,遍历汇编指令,找到分支指令;
S53:将分支指令所指向的目标地址与已记录在案的分支地址进行对比;
S54:判断目标地址是否使用过,若是则进入步骤S56,否则进入步骤S55;
S55:记录分支指令所指向的地址,行成对应的新标号;
S56:将分支指令所指向的目标地址替换为对应标号;
S57:判断遍历是否完成,若是则得到所有分支指令所指向的目标地址及其标号,进入步骤S58,否则返回步骤S52;
S58:再次遍历汇编指令,根据步骤S57得到的目标地址信息,将对应的分支指令标识符添加到对应地址的指令前,直至遍历结束,完成DSP处理器的静态反汇编。
上述进一步方案的有益效果是:在本发明中,每个DSP处理器指令集都存在分支指令,这个指令的作用是实现程序的跳转,而在汇编代码中,指令的跳转需要标识符予以辅助,添加标识符能让整个汇编代码更具可读性。
附图说明
图1为静态反汇编方法的流程图;
图2为ADD指令格式的示意图;
图3为中间文件内容的示意图;
图4为步骤S4的流程图;
图5为步骤S5的流程图;
图6为B指令的示意图。
具体实施方式
下面结合附图对本发明的实施例作进一步的说明。
如图1所示,本发明提供了一种基于DSP处理器特点的指令集静态反汇编方法,包括以下步骤:
S1:建立数据文件格式分析库和二进制映射汇编数据库;
S2:基于数据文件格式分析库和二进制映射汇编数据库,读出储存在DSP处理器片外非易失性存储器的二进制数据,得到原始二进制数据;
S3:根据数据文件格式分析库处理原始二进制数据,得到属于程序段的二进制代码数据;
S4:根据二进制映射汇编数据库,采用静态反汇编法对二进制代码数据进行反汇编,得到对应的汇编指令;
S5:对汇编指令添加分支标识符,完成DSP处理器的静态反汇编。
本发明的有益效果是:本发明提出了一种基于DSP处理器特点的指令集静态反汇编方法,该方法将对运行于DSP处理器平台的二进制代码进行反汇编,获得汇编级的代码。
在本发明实施例中,如图1所示,步骤S1中,根据TI的官方bootloader手册建立数据文件格式分析库,其包括二进制代码数据的结构信息、自启动表和块头数据的位置信息;
根据TI的官方指令集建立二进制映射汇编数据库,其形式为操作码值+固定值+指令模板。
在本发明中,建立数据库属于反汇编流程的准备工作,建立好的数据库作为输入,可指导整个反汇编流程的顺利进行。
针对数据文件格式分析库,启动数据的信息可以从各个型号处理器的bootloader手册中查询。同时需要获得自启动表的起始地址和长度以及代码数据的起始地址和长度信息,来填入二进制数据格式分析库中。
针对二进制映射汇编数据库,对于不同型号的处理器,其指令集是不同的,但对其的分析是一致的。目前TI官方公布的指令集如表1所示,它包含了TI生产的各种型号的DSP处理器。
表1
下面以TMS320C64x/C64x+指令系统为例阐述如何建立数据库。
如图2所示是一条ADD指令的指令格式。从格式中得知,这是一条32位长的指令,这条指令被分成六个部分,creg+z域代表的是这条指令的条件判断信息,dst+src2+src1域代表的是这条指令的操作数,op域代表的是这条指令的操作码,bit2-4是这条指令的固定值,x+s+p分别代表了交叉通道的开启、路径的选择以及并行的信息,这三个域都有关于DSP处理器独特的双通道结构,而其他处理器没有,因此对指令集的分析需要针对型号。而它们一致的信息是操作码值+固定值,这两个域的值代表了这条指令位是哪一条指令,因此需要提取这两个域的信息形成数据库。二进制映射汇编数据库的形式为操作码值+固定值+指令模板,以上面ADD指令为例,它在数据库中的值为0000011110ADD.L xsint sint sint,因为操作数和条件判断域的值是可以随意改变的,因此不纳入数据库的记录中,需要通过后面的系统进行实时的判断。
在本发明实施例中,如图1所示,步骤S2中,若二进制数据存储在片外EPPROM,则通过I2C通信从EPPROM拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据;
若二进制数据存储在片外Flash,则通过EMIF通信从Flash拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据。
在本发明中,在本发明中,由于数据是存储在DSP处理器片外的非易失性存储器中,所以需要从中读取出来。并针对存储在不同片外位置的二进制数据采用了不同通信方式的读取方法。
在本发明实施例中,如图1所示,步骤S3包括以下子步骤:
S31:根据数据文件格式分析库中的自启动表和块头数据的位置信息,分离原始二进制数据中的表头数据,得到中间文件;
S32:根据数据文件格式分析库中的代码块分布信息,处理中间文件,得到属于程序段的二进制代码数据。
在本发明中,反汇编的目标是存储在片外非易失性存储器中的代码数据,它是由可行执行文件.out文件经过工具转换而来的,.out文件包含了文件头、段头信息以及各个段的数据,其中各个段(Section)的数据正是DSP处理器可以识别的二进制机器码,在转换过程中.hex文件也只保留这些数据,同时加上了诸如启动信息表和块头等启动信息。而反汇编只针对二进制机器码,因此需要把这些不需要的信息剔除。
下面对原始二进制数据处理过程中文件内容的变化进行说明。由图3可以看出,删除了自启动表头和块头数据后,中间文件只包含了数据文件中的.hex部分,其余部分均被删除。中间文件由三部分组成:第一个32bit数据是程序的入口地址,即c_int00的地址,c_int00是运行支持库中的一个重要函数,是程序初始化的入口;最后一个32bit数据则是启动代码的结束标志;中间部分是整个中间文件主体,它存放的是每个段代码的信息。以Section n为例,size代表的是此段在RAM运行中所占的大小,dest代表的是此段在RAM运行时的首地址,而data则代表的是这个段中的数据。因此把dest值作为一个段的首地址,通过size计算这个段的大小空间,由于每条指令长度为4bytes,即每个地址也相隔4bytes,通过这个方法建立了地址空间后,把这个段的数据逐条按顺序填入这个空间中,和每个地址一一对应。完成以上步骤后,输出的文件格式是地址+二进制代码的文件格式。
在本发明实施例中,如图3所示,步骤S32中,通过段代码信息建立地址空间,将本段的二进制数据逐条填入地址空间,与每个地址一一对应,得到形式为地址+二进制代码的输出文件,所述输出文件包含需要进行反汇编的二进制代码数据以及对应的地址信息。
在本发明中,为二进制数据加上与之对应的地址信息,便于后续二进制映射汇编数据库进行识别翻译。
在本发明实施例中,如图4所示,步骤S4包括以下子步骤:
S41:对二进制代码数据进行逐条扫描;
S42:判断二进制代码数据是否为库中代码,若是则进入步骤S43,否则返回步骤S41;
S43:执行代码翻译程序,得到完整的汇编指令。
在本发明中,二进制代码反汇编就是把处理过后的二进制数据进行反汇编的过程,采取的是静态反汇编法进行扫描并翻译,翻译实际是一个搜索的过程,可将程序翻译成完整的汇编指令。
在本发明实施例中,如图4所示,步骤S42中,判断方法为:将二进制代码数据截取成长度为7Bit的操作码段,与二进制映射汇编数据库的操作码一一比对,直至找到相同的操作码后进入步骤S43,否则保持原有代码形式返回步骤S41;
步骤S43中,将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比对确定,翻译成一条完整的汇编指令。
在本发明中,判断方法可以对二进制数据的汇编代码进行逐条扫描,能保证对每条汇编代码都进行了反汇编。
在本发明实施例中,如图5所示,步骤S5包括以下子步骤:
S51:建立一个记录分支指令所指向的目标地址及其标号的空间,标号形式为label1、label2、…、labeln;
S52:基于空间,遍历汇编指令,找到分支指令;
S53:将分支指令所指向的目标地址与已记录在案的分支地址进行对比;
S54:判断目标地址是否使用过,若是则进入步骤S56,否则进入步骤S55;
S55:记录分支指令所指向的地址,行成对应的新标号;
S56:将分支指令所指向的目标地址替换为对应标号;
S57:判断遍历是否完成,若是则得到所有分支指令所指向的目标地址及其标号,进入步骤S58,否则返回步骤S52;
S58:再次遍历汇编指令,根据步骤S57得到的目标地址信息,将对应的分支指令标识符添加到对应地址的指令前,直至遍历结束,完成DSP处理器的静态反汇编。
在本发明中,每个DSP处理器指令集都存在分支指令,这个指令的作用是实现程序的跳转,而在汇编代码中,指令的跳转需要标识符予以辅助,添加标识符能让整个汇编代码更具可读性。
下面对分支标识符的添加进行举例说明。
例如B指令就是一条分支指令,它在反汇编后的格式为B.S1 0x00000000,后面的0x00000000其实对应的是需要跳转的地址值,所以需要将0x00000000转成标识符,然后添加到对应地址的指令前,如图6所示为B指令的label,在没转换前它的地址值为0x0000000C,转换成label后再添加到0x0000000C地址所示的指令前。
下面结合实例对本发明进行验证实验。
实验采用EVMC6474作为实验对象,实验板已事先装载好了led程序。首先需要确立研究对象,EVMC6474装载的是TI的TMS320C6474 DSP处理器,通过编写I2C读写程序获取了存储在EPPROM里的led程序,这个程序的形式是以二进制数据的形式呈现的。根据分析,获取到的二进制数据由以下几部分组成。第一部分是自启动表头,这是指导DSP从EPPROM复制数据到RAM进行执行的数据块,这对于获取起始地址信息有很大帮助;第二部分是各个块的块头,存储在EPPROM的数据都是以块的形式存储的,除了第一个块没有块头外,后面的块都有块头,用于指示数据是否结束。另外,CMD文件的映射也会反映在二进制数据中。根据分析得知,一个段的开始往往先以表示其起始地址以及数据长度的二进制数据开始,后面跟随的才是二进制代码,以此建立二进制数据结构分析库以指导原始数据的处理。
下面介绍的是二进制映射汇编数据库的建立。通过TI官网文档得知,64x/64x+指令分为32bit指令和16bit指令,其次DSP处理器都是以包的形式处理指令的,一次传输一个包进行处理,每个包包含8条32bit的数据,当出现16bit指令时,这个包的最后一条指令必定为包头指令,用于区分前面7条数据哪些为32bit,哪些为16bit,若这个包没有16bit指令,则无包头指令。所以将数据库分成32bit指令以及16bit指令。
通常情况一条汇编指令有以下几部分元素,Label:parallel[condition]opcode.unit operand。Label是分支标识符,这是分支指令的跳转标志地址,一般只在分支指令指向此条指令时才会出现这个标识符。Parallel是并行标识符,出现指令并行时则为||,否则省略。Condition是条件判断,若不进行条件判断则省略。Opcode为操作指令,Unit为执行单元,Operand为操作数。
下面以ADD指令为例,阐述如何建立数据库。从TI官方文档分析得,一条32bit指令最重要的是op域和固定位,它们的组合往往告知了这条32bit数据代表的是哪条指令,其余的域也很重要,但它是可变的,例如DSP处理器有A0~A31和B0~B31两组寄存器,这就代表了dst、src1和src2这三个域的值不同代表的寄存器也不同。所以数据库中只存能代表指令的值:操作码值+固定位,从图2看就是op+110,其中0000011110就代表ADD.L src1,src2,dst这条指令,至于汇编指令的其他元素以及具体使用的寄存器,可以采用实时分析的方法获得,并不存储在数据库中。
数据库建立好之后,就开始按步骤对获取的二进制数据进行反汇编。首先进行原始数据处理,在进行原始数据处理时,由于实验对象有两种长度的指令,在进行地址分配时,需先进行包头的解析,把这组包含16bit指令的包进行解析,再进行地址的分配。输出的是地址+二进制代码形式的文件。完成了原始数据处理后,对二进制代码进行反汇编工作。反汇编工作总体来说有两个过程,第一是判断此条数据是否为库中代码,方法是获取此条数据某些数据域的值与数据库中的值进行比对,看是否存在,例如获取到2-11位的数据为0000011110,通过对比数据库会发现是上述ADD指令。第二个过程是指令其余元素的翻译,creg和z域确立的是condition的值,x和s域确立的是unit的值,而dst、src1和src2具体使用哪些寄存器由它们本身的值以及x和s域决定,p域的值代表的是下一条指令是否并行,所以说当前指令的并行标志parallel需由上一条指令的p值决定,这就是为什么数据库只存关键数据,其余值由当前数据分析得来的原因。
最后一步是遍历所有翻译完成的汇编代码,其目的有两个。第一个是检错纠错,例如某些指令只能在.S2单元上执行,但却翻译成了.S1或者其它,这就需要进行修正,重新对这一条数据进行翻译,再翻译是寻找此条数据所有的可能指令形式,若仍然错误,则还原为数据形式输出。更多的检错机制需要自行匹配DSP处理器的特点。第二个目的是给分支指令添加label标识符,当分支指令的跳转地址不在分配的地址范围内时,也需要进行检错纠错。当此过程完成后,输出的才是最终的汇编指令代码文件。
如表2所示为本实验的结果。
表2
文件大小 | 反汇编速度 | 反汇编正确率 |
90.5KB | 2Mb/min | 99% |
最后实验结果表明,反汇编正确率在99%以上,不能达到完全一致是因为个别指令有完全一致的二进制代码,例如MV.D src2 dst和OR.D 0src2 dst,但它们在逻辑上是等价的,并不会因此影响汇编代码的逻辑。
本发明的工作原理及过程为:DSP处理器采用的是哈佛结构,其程序和数据分开存储。在这体系结构下的处理器首先到程序指令存储器中读取指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,然后执行这一操作。基于其程序和数据分开的特点,对其进行反汇编时可以直接使用线性反汇编算法,逐条对指令进行翻译,而不用排除数据的混入。
本发明的有益效果为:本发明提出了一种基于DSP处理器特点的指令集静态反汇编方法,该方法将对运行于DSP处理器平台的二进制代码进行反汇编,获得汇编级的代码。本发明为了适应DSP处理器的特点,对反汇编的过程做出了改进与适应,同时为了提升反汇编的正确性,加入了汇编检测,保证了反汇编的效率和准确率。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
Claims (7)
1.一种基于DSP处理器特点的指令集静态反汇编方法,其特征在于,包括以下步骤:
S1:建立数据文件格式分析库和二进制映射汇编数据库;
S2:基于数据文件格式分析库和二进制映射汇编数据库,读出储存在DSP处理器片外非易失性存储器的二进制数据,得到原始二进制数据;
S3:根据数据文件格式分析库处理原始二进制数据,得到属于程序段的二进制代码数据;
S4:根据二进制映射汇编数据库,采用静态反汇编法对二进制代码数据进行反汇编,得到对应的汇编指令;
S5:对汇编指令添加分支标识符,完成DSP处理器的静态反汇编;
所述步骤S5包括以下子步骤:
S51:建立一个记录分支指令所指向的目标地址及其标号的空间,标号形式为label1、label2、…、labeln;
S52:基于空间,遍历汇编指令,找到分支指令;
S53:将分支指令所指向的目标地址与已记录在案的分支地址进行对比;
S54:判断目标地址是否使用过,若是则进入步骤S56,否则进入步骤S55;
S55:记录分支指令所指向的地址,行成对应的新标号;
S56:将分支指令所指向的目标地址替换为对应标号;
S57:判断遍历是否完成,若是则得到所有分支指令所指向的目标地址及其标号,进入步骤S58,否则返回步骤S52;
S58:再次遍历汇编指令,根据步骤S57得到的目标地址信息,将对应的分支指令标识符添加到对应地址的指令前,直至遍历结束,完成DSP处理器的静态反汇编。
2.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S1中,根据TI的官方bootloader手册建立数据文件格式分析库,其包括二进制代码数据的结构信息、自启动表和块头数据的位置信息;
根据TI的官方指令集建立二进制映射汇编数据库,其形式为操作码值+固定值+指令模板。
3.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S2中,若二进制数据存储在片外EPPROM,则通过I2C通信从EPPROM拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据;
若二进制数据存储在片外Flash,则通过EMIF通信从Flash拷贝二进制数据到片内的RAM,利用CCS工具的打印数据功能复制片内的二进制数据,形成数据文件,得到原始二进制数据。
4.根据权利要求2所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S3包括以下子步骤:
S31:根据数据文件格式分析库中的自启动表和块头数据的位置信息,分离原始二进制数据中的表头数据,得到中间文件;
S32:根据数据文件格式分析库中的代码块分布信息,处理中间文件,得到属于程序段的二进制代码数据。
5.根据权利要求4所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S32中,通过段代码信息建立地址空间,将本段的二进制数据逐条填入地址空间,与每个地址一一对应,得到形式为地址+二进制代码的输出文件,所述输出文件包含需要进行反汇编的二进制代码数据以及对应的地址信息。
6.根据权利要求1所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S4包括以下子步骤:
S41:对二进制代码数据进行逐条扫描;
S42:判断二进制代码数据是否为库中代码,若是则进入步骤S43,否则返回步骤S41;
S43:执行代码翻译程序,得到完整的汇编指令。
7.根据权利要求6所述的基于DSP处理器特点的指令集静态反汇编方法,其特征在于,所述步骤S42中,判断方法为:将二进制代码数据截取成长度为7Bit的操作码段,与二进制映射汇编数据库的操作码一一比对,直至找到相同的操作码后进入步骤S43,否则保持原有代码形式返回步骤S41;
所述步骤S43中,将二进制数据的汇编代码与二进制映射汇编数据库的操作码进行比对确定,翻译成一条完整的汇编指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010166987.XA CN111399852B (zh) | 2020-03-11 | 2020-03-11 | 一种基于dsp处理器特点的指令集静态反汇编方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010166987.XA CN111399852B (zh) | 2020-03-11 | 2020-03-11 | 一种基于dsp处理器特点的指令集静态反汇编方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111399852A CN111399852A (zh) | 2020-07-10 |
CN111399852B true CN111399852B (zh) | 2022-08-16 |
Family
ID=71432324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010166987.XA Active CN111399852B (zh) | 2020-03-11 | 2020-03-11 | 一种基于dsp处理器特点的指令集静态反汇编方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111399852B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114020278B (zh) * | 2020-07-19 | 2024-06-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
CN102681821A (zh) * | 2011-12-31 | 2012-09-19 | 浙江大学 | 基于C-SKY v2指令集的二进制工具集设计方法 |
CN103885770A (zh) * | 2014-01-21 | 2014-06-25 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017011702A1 (en) * | 2015-07-15 | 2017-01-19 | Cylance Inc. | Malware detection |
-
2020
- 2020-03-11 CN CN202010166987.XA patent/CN111399852B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
CN102681821A (zh) * | 2011-12-31 | 2012-09-19 | 浙江大学 | 基于C-SKY v2指令集的二进制工具集设计方法 |
CN103885770A (zh) * | 2014-01-21 | 2014-06-25 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
Non-Patent Citations (1)
Title |
---|
"一种基于反汇编技术的二进制补丁分析方法";曾鸣等;《计算机科学》;20061025;第33卷(第10期);第283-287页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111399852A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7571427B2 (en) | Methods for comparing versions of a program | |
US20090249307A1 (en) | Program analysis apparatus, program analysis method, and program storage medium | |
CN110147235B (zh) | 一种源代码与二进制代码间的语义比对方法和装置 | |
US20180165079A1 (en) | Instruction-set simulator and its simulator generation method | |
CN104915211A (zh) | 反编译中基于子图同构匹配算法的内在函数识别方法 | |
US11327722B1 (en) | Programming language corpus generation | |
CN109214149B (zh) | 一种mips固件基地址自动化检测方法 | |
CN111399852B (zh) | 一种基于dsp处理器特点的指令集静态反汇编方法 | |
CN107515739A (zh) | 提高代码执行性能的方法及装置 | |
EP4209895A1 (en) | Code translation method and apparatus, and device | |
CN117707612A (zh) | 代码的处理方法、装置及电子设备 | |
CN103049504A (zh) | 基于源代码查询的半自动插桩方法 | |
CN115421861B (zh) | 一种通用的TMS320C55x处理器指令集虚拟化仿真方法 | |
CN114816435A (zh) | 一种基于逆向技术的软件开发方法 | |
CN113434385A (zh) | 一种针对软件模型检查工具的测试用例自动生成方法和系统 | |
CN113296833B (zh) | 一种二进制文件中合法指令的识别方法及装置 | |
Liang et al. | Semantics-recovering decompilation through neural machine translation | |
CN115421865B (zh) | 一种dsp c6713处理器指令集虚拟化仿真方法 | |
CN115421863B (zh) | 一种通用的mips64处理器指令集虚拟化仿真方法 | |
JP2015197821A (ja) | アセンブリコード変換装置およびその変換方法 | |
CN115421864B (zh) | 一种通用的PowerPC架构处理器指令集虚拟化仿真方法 | |
CN115421860B (zh) | 一种通用的sparc处理器指令集虚拟化仿真方法 | |
CN116880826B (zh) | 一种可视化代码生成方法 | |
CN115480872B (zh) | 一种dsp c2812处理器指令集虚拟化仿真方法 | |
CN115129320B (zh) | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |