痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件

发布者:TranquilJourney最新更新时间:2019-12-19 来源: eefocus关键字:ARM  Cortex-M  反汇编文件 手机看文章 扫描二维码
随时随地手机看文章

  痞子衡在第四、五、六节课分别介绍了编译器/链接器生成的3种output文件(relocatable、map、exectuable文件),这3种文件都是侧重的代码经过汇编/链链接后的二进制数据在存储中分布情况。如果想知道二进制数据对应的机器码具体是什么意思应该怎么办?痞子衡今天要介绍的反汇编文件会给你答案。


一、标准汇编源文件

  使用IAR进行编译的时候会在D:myProjectbspbuildsdemoReleaseList目录下生成.s文件,每一个relocatable文件都对应着一个.s文件,这是编译器对C源文件进行汇编后得到的汇编文件。以task.c汇编生成的task.s为例:


  task.s文件就是用汇编语言对task.c文件的逐句汇编式翻译,下面仅列出normal_task()函数的汇编代码,如果你愿意的话,你可以直接用这个task.s文件替代task.c文件放进工程里,功能是一样的。


        SECTION `.text`:CODE:NOROOT(1)

          CFI Block cfiBlock0 Using cfiCommon0

          CFI Function normal_task

          CFI NoCalls

        THUMB

//   17 void normal_task(void)

//   18 {

//   19     s_variable0 *= 2;

normal_task:

        LDR      R0,??DataTable1

        LDR      R0,[R0, #+0]

        MOVS     R1,#+2

        MULS     R0,R1,R0

        LDR      R1,??DataTable1

        STR      R0,[R1, #+0]

//   20 }

        BX       LR               ;; return

          CFI EndBlock cfiBlock0

//   21 

  task.s文件最后还会给出文件里的object在各section中的总size情况。


// 20 bytes in section .bss

//  4 bytes in section .data

//  4 bytes in section .noinit

// 86 bytes in section .text

// 16 bytes in section .textrw

// 

// 102 bytes of CODE memory

//  28 bytes of DATA memory


二、中间汇编list文件

  使用IAR进行编译的时候会在D:myProjectbspbuildsdemoReleaseList目录下生成.lst文件,每一个relocatable文件都对应着一个.lst文件,这是编译器对C源文件进行汇编后得到的汇编文件的补充信息文件。继续以task.c汇编生成的task.lst为例:

  task.lst文件在task.s的基础上还加入了对汇编指令的机器码翻译信息,其中有0x....表明该文件没有经过全局的链接,所以还无法确定机器码。


                                    In section .text, align 2, keep-with-next

     17          void normal_task(void)

     18          {

     19              s_variable0 *= 2;

                        normal_task: (+1)

      00000000   0x....             LDR      R0,??DataTable1

      00000002   0x6800             LDR      R0,[R0, #+0]

      00000004   0x2102             MOVS     R1,#+2

      00000006   0x4348             MULS     R0,R1,R0

      00000008   0x....             LDR      R1,??DataTable1

      0000000A   0x6008             STR      R0,[R1, #+0]

     20          }

      0000000C   0x4770             BX       LR               ;; return

     21   

  task.lst文件最后还给出最大栈使用的分析以及各object具体size情况。


   Maximum stack usage in bytes:


   .cstack Function

   ------- --------

      24   heap_task

        24   -> __aeabi_memcpy

        24   -> __aeabi_memset

        24   -> free

        24   -> malloc

       0   normal_task

       0   ram_task



   Section sizes:


   Bytes  Function/Label

   -----  --------------

       4  ??DataTable1

       4  ??DataTable1_1

       4  ??DataTable1_2

      60  heap_task

       4  n_variable1

      14  normal_task

      16  ram_task

      16  s_array

       4  s_variable0

       4  s_variable2


三、完整汇编dump文件

  dump文件是所有list文件的集合,也是整个image文件的机器码数据的逐句汇编式翻译,还是以task.c里的normal_task()为例,在list文件中我们会看到部分未知机器码0x....,而在dump文件里这部分位置机器码被填充成真实的机器码。有了dump文件,我们就可以从汇编角度对整个工程进行解读分析。


  //     s_variable0 *= 2;

            $t:

            `.text12`:

            normal_task:

    0xcc: 0x4812         LDR.N R0, `.text_8`          ; `.data$$Limit`

    0xce: 0x6800         LDR   R0, [R0]

    0xd0: 0x2102         MOVS  R1, #2

    0xd2: 0x4348         MULS  R0, R1, R0

    0xd4: 0x4910         LDR.N R1, `.text_8`          ; `.data$$Limit`

    0xd6: 0x6008         STR   R0, [R1]

  // }

    0xd8: 0x4770         BX    LR


四、使用ielfdumparm.exe生成dump文件

  dump文件默认是不生成的,但是IAR里提供了工具可以帮我们生成dump文件,这个工具叫ielfdumparm.exe。


位置:IAR SystemsEmbedded Workbench xxxarmbinielfdumparm.exe

用法:ielfdumparm.exe --source --code demo.elf -o demo.dump


  至此,嵌入式开发里的反汇编文件(.s, .lst, .dump)文件痞子衡便介绍完毕了

关键字:ARM  Cortex-M  反汇编文件 引用地址:痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件

上一篇:痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件
下一篇:痞子衡嵌入式:ARM Cortex-M文件那些事(6)- 可执行文件(.out/.e

推荐阅读最新更新时间:2024-11-16 21:31

基于ARM9的音频系统设计
  1 引言   随着 Internet技术和多媒体技术的快速发展,语音通信技术的应用越来越广泛,也越来越受到重视 。如今的嵌人式设备日益复杂化,功能比以前更加丰富,性能也越来越高。在多种嵌人式终端产品中,音频处理功能已成为不可缺少的重要组成部分,高质量的音效是当前发展的重要趋势。   本文利用 ATMEL公司 的 AT91RM9200型微处理器 和 Philips公司的 UDA1341型立体声音频编解码器设计了一种嵌入式音频系统。该嵌入式音频系统硬件部分采用基于IIS总线的音频系统体系结构,其主要硬件电路后文作了详细的介绍。软件上,笔者以嵌入式Linux操作系统作为平台,重点介绍该音频系统在此平台下的驱动程序的实现。
[嵌入式]
基于ARM44B0x的信号发射机控制器设计与实现
1.前言 船舶上使用的信号发射机是连续工作的,所以需要一个控制器对发射机的工作状态进行监控,常见的是用单片机作控制器的内核,但由于32位微处理器具有更好的精度和可靠性且低成本低功耗,所以在工业控制领域的应用日益广泛。采用嵌入式的32位微处理ARMS3C44B0x作为控制器的内核,设计的控制器将比用单片机作内核的处理器具有更全面的功能和更好的使用性能。 发射机控制器的主要功能是对多路模拟量和开关量的数据采集和处理监控发射机的工作状态;控制器控制发射机同时控制器又受上位机的控制,它要能在任意时刻准备好接收从上位机串口、网口发来的数据,它们之间的相对关系如图: 图1 控制器系统结构图 上位机向控制器发送数据从而实现对控
[单片机]
基于<font color='red'>ARM</font>44B0x的信号发射机控制器设计与实现
ARM 之FIQ(快速中断) IRQ(中断)
IRQ,FIQ定义: 这就是个普通中断,当我们程序定义了该中断,并且在程序运行的时候产生了IRQ中断,则此时的芯片是这样运行的------中断处理器吧利用IRQ请求线来高速ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。 那么问题来啦,为何要有这两个中断,或者说为何分成这两种中断,?、原因很简单,速度不同,FIQ 也就是快速中断的速度快,那么问题又来了,为何就FIQ速度快??? 原因:1:ARM的FIQ模式提供了更多的banked寄存器,r8到r14还
[单片机]
IEC 61131-3标准与ARM嵌入式控制系统
引 言   ARM是采用ARM公司技术知识产权(IP)核的微处理器。其中ARM7是低功耗的32位核,具有小体积、低功耗、低成本而高性能的特点,在信息家电、工业控制和无线通信等领域得到了广泛的应用。   IEC61131-3国际标准是国际标准化组织(国际电工技术委员会)为工业控制软件编程制定的第一个国际标准。该标准针对工业控制系统所阐述的软件设计概念、模型等,适应了当今世界软件、工业控制系统的发展方向,是一种非常先进的设计技术。   友好的交互界面、网络互联功能、智能化的软件、实时数据处理已成为现代测控系统的共同需求,因此,殴计并实现基于ARM微处理器和IEC 6113l-3标准的嵌入式实时控制系统很有意义。 1 系统的设计与实现
[单片机]
IEC 61131-3标准与<font color='red'>ARM</font>嵌入式控制系统
基于ARM 7 的S3C44B0X 与多路模拟器控制板通讯接口设计与实现
  0 引言   ARM (Advanced RISC Machines)是近年来在各个领域日益得到广泛应用的32 位微处理器,它既是一个公司的名称,也同样是一类微处理器的通称,包括ARM7、ARM9、ARM9E、ARM10E、SecurCore 等系列。其中ARM7 系列处理器是低功耗的32 位RISC 处理器,它主要用于对功耗和成本要求比较苛刻的产品,它支持16 位的Thumb指令集,使用Thumb 指令集能以16 位的系统开销得到32 位的系统性能。   以ARM 作为微处理器核心嵌入式系统,因其功耗极低,主频高,具有进行高速运算处理能力,完成绝大多数复杂应用的特点。采用SamsungS3C44B0X 微处理器的嵌入式操
[单片机]
基于<font color='red'>ARM</font> 7 的S3C44B0X 与多路模拟器控制板通讯接口设计与实现
内嵌ARM核的EPXA10在图像驱动和处理方面的应用用
随着亚微米技术的发展,FPGA芯片密度不断增加,并以强大的并行计算能力和方便灵活的动态可重构性,被广泛地应用于各个领域。但是在复杂复法的实现上,FPGA却远没有32位RISC处理器灵活方便,所以在设计具有复杂算法和控制逻辑的系统时,往往需要RISC和FPGA结合使用。这样,电路设计的难度也就相应大大增加。随着第四代EDA开发工具的使用,特别是在IP核产业的迅猛发展下产生的SOPC技术的发展,使嵌入式RISC的通用及标准的FPGA器件呼之欲出。单片集成的RISC处理器和FPGA大大减小了硬件电路复杂性和体积,同时也降低了功耗、提高了系统可靠性。Altera公司的EPXA10芯片就是应用SOPC技术,集高密度逻辑(FPGA)、存储器(
[单片机]
内嵌<font color='red'>ARM</font>核的EPXA10在图像驱动和处理方面的应用用
ARM各种异常返回地址的计算
首先,给出ARM的三级流水线结构图,这是后面分析的基础。 上图中最左侧为指令的地址,根据三级流水线结构,当PC=0X3008是时,正在执行的的指令是地址为0X3000的这条指令。 在分别讲解各种异常之前,有一条总的原则就是:无论发生什么异常(除复位),内核总是会首先将 PC-4 放到LR寄存器中。 1.复位异常 复位异常中断处理程序不需要返回。在复位异常中断处理程序开始整个用户程序的执行,因而它不需要返回。 2.未定义指令异常 指遇到了一条没有定义的指令导致执行时无法执行。 未定义指令异常中断是由当前执行的指令自身产生的,当产生中断时,程序计数器PC的值还未更新(未更新的意思就是PC还没有加4 呢);
[单片机]
<font color='red'>ARM</font>各种异常返回地址的计算
采用ARM+Linux 的仪器控制系统设计
0 引 言   嵌入式系统的开发都有其特殊的应用场合与特定功能,而嵌入式Linux操作系统因其开源和广泛的处理器支持、易于移植而备受行业青睐。AT91RM9200是Atmel公司针对系统控制、通信领域推出的基于ARM920T内核的32位RISC微处理器,它具有小体积,低功耗,低成本及高性能等特点,其内部集成了SPI、串口、PIO、以太网、EBI、USB、MCI等多种接口。   在Linux系统中,应用层不可以直接操作硬件,需设计驱动程序向下屏蔽硬件特性,实现硬件与用户间的通信。系统平台为在虚拟机中安装Fedora 8,目标系统采用Linux 2.6.21.7内核,定制文件系统建立NFS根文件系统,使用双网卡方式搭建成交叉开发环
[工业控制]
采用<font color='red'>ARM</font>+Linux 的仪器控制系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved