历史上的今天
返回首页

历史上的今天

今天是:2024年09月13日(星期五)

正在发生

2021年09月13日 | jz2440裸机开发与分析: 点亮LED灯之C语言2

2021-09-13 来源:eefocus

编译 链接 取反汇编

arm-none-linux-gnueabi-gcc -g -nostdlib -c -o led.o led.c

arm-none-linux-gnueabi-gcc -g -nostdlib -c -o start.o start.s

arm-none-linux-gnueabi-ld -Ttext 0 -g start.o led.o -o led.elf

arm-none-linux-gnueabi-objcopy -O binary -S led.elf led.bin

arm-none-linux-gnueabi-objdump -D led.elf > led.dis


反汇编源码分析(led.dis)

led.elf:     file format elf32-littlearm


Disassembly of section .text:


00000000 <_start>:

   0: e3a0da01 mov sp, #4096 ; 0x1000            //sp  =  4096

   4: eb000000 bl c

                        //跳转main函数 并且 lr = 8


00000008 :

   8: eafffffe b 8


0000000c

:

   c: e1a0c00d mov ip, sp                         //ip = 4096

  10: e92dd800 stmdb sp!, {fp, ip, lr, pc}      //分析见下图

  14: e24cb004 sub fp, ip, #4 ; 0x4              //fp = 4092

  18: e24dd008 sub sp, sp, #8 ; 0x8              //sp = 4088

  1c: e3a03456 mov r3, #1442840576 ; 0x56000000   //r3 = 0x56000000

  20: e2833050 add r3, r3, #80 ; 0x50             //r3 = 0x56000050

  24: e50b3010 str r3, [fp, #-16]       //地址fp(4092)-16 = 4076 存入0x56000050是c语言unsigned int *pGPFCON = (unsigned int *)0x56000050;

  28: e3a03456 mov r3, #1442840576 ; 0x56000000

  2c: e2833054 add r3, r3, #84 ; 0x54

  30: e50b3014 str r3, [fp, #-20]     

  34: e51b2010 ldr r2, [fp, #-16]

  38: e3a03c01 mov r3, #256 ; 0x100

  3c: e5823000 str r3, [r2]                       //和上同理地址4072存入0x100

  40: e51b2014 ldr r2, [fp, #-20]

  44: e3a03000 mov r3, #0 ; 0x0

  48: e5823000 str r3, [r2]                      //*pGPFDAT = 0;

  4c: e3a03000 mov r3, #0 ; 0x0            //return 0;

  50: e1a00003 mov r0, r3

  54: e24bd00c sub sp, fp, #12 ; 0xc

  58: e89da800 ldmia sp, {fp, sp, pc}    //分析见下图

Disassembly of section .comment:


00000000 <.comment>:

   0: 43434700 cmpmi r3, #0 ; 0x0

   4: 4728203a undefined

   8: 2029554e eorcs r5, r9, lr, asr #10

   c: 2e342e33 mrccs 14, 1, r2, cr4, cr3, {1}

  10: Address 0x10 is out of bounds.


第10行分析

0 :

第58行分析(最终sp=4096 pc = 8 成功执行完主函数)

在这里插入图片描述

栈:就是sp指向的内存可读可写

推荐阅读

史海拾趣

Electronic Transistors Corp公司的发展小趣事

在技术创新的基础上,ETC公司开始积极拓展市场。公司通过优化产品线,满足不同客户的需求,逐渐打开了国际市场的大门。同时,ETC还加大了品牌宣传力度,通过参加国际电子展会、发布技术白皮书等方式,提升品牌知名度和影响力。这些举措使ETC在全球范围内的市场份额不断扩大,品牌影响力也日益增强。

CDI-DIODE公司的发展小趣事

随着环保意识的日益增强,电子行业也开始向绿色生产转型。CDI-DIODE公司积极响应这一趋势,投入大量资源研发环保型二极管产品,并采用环保材料和生产工艺。这种绿色生产方式不仅降低了公司的生产成本,也符合了社会的可持续发展需求,为公司的未来发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了电子行业中企业可能面临的一些共同挑战和机遇。无论对于CDI-DIODE公司还是其他企业,这些故事都具有一定的借鉴意义。

CHINFA公司的发展小趣事

CHINFA公司的创立并非一帆风顺。在创业初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重困难。然而,公司的创始人凭借对电子行业的深厚热爱和坚定信念,带领团队克服了一个又一个难关。他们通过自主研发、技术创新和市场拓展,逐渐在行业中崭露头角。

Conxall公司的发展小趣事

在快速发展的同时,Conxall公司始终牢记企业的社会责任。公司积极参与公益事业,捐资助学、扶贫济困。同时,公司还注重环保和可持续发展,采用环保材料和节能技术,努力降低生产过程中的能耗和排放。这些举措不仅赢得了社会的广泛赞誉,也为公司的长远发展奠定了良好的社会基础。

这些故事虽然是以虚构的Conxall公司为背景,但其中所蕴含的创新、突破、拓展、合作和社会责任等要素,是任何一个成功的电子行业企业都不可或缺的品质。希望这些故事能够满足您的需求。

EIC [EIC discrete Semiconductors]公司的发展小趣事

EIC公司自创立之初,就致力于离散半导体技术的研发与创新。在成立初期,公司面临了技术瓶颈和市场接受度的双重挑战。然而,EIC的研发团队通过不懈努力,成功研发出了一款高性能、低功耗的离散半导体产品,这一技术突破不仅为公司赢得了市场认可,也为后续的产品线扩展奠定了坚实的基础。随着技术的不断进步和产品线的不断丰富,EIC逐渐在电子行业中树立起了自己的品牌形象。

骅讯(Cmedia)公司的发展小趣事

随着技术的不断发展,骅讯公司进一步扩大了其业务范围,成功开发了PC主板AC97。这一成果是英特尔高清晰度音频应用的重要发展,标志着骅讯在音频技术领域的进一步突破。通过AC97的开发,骅讯进一步巩固了其在音频芯片设计领域的领先地位。

问答坊 | AI 解惑

急救!关于protel 99se的仿真

当我在对一个电路进行仿真时总是出现这些错误,但我又不知道什么意思,请各位高手指点一下。 非常感谢! C3 Error: Pin order data (PINS=1:[]) not in READ ONLY field 4. Pins sorted by pin-name. C3 Error ...…

查看全部问答>

电气柜内线号标法?

做电气的几年中,我发现有些厂家线号是头尾一致(为同一线号),这种标法后期维护查线较烦,也有厂家头尾一不致(比如说A另一头B,A头标志为B头的电气元件及其的输入/输出点号,B头标志为A头的电气元件及其的输入/输出点号),这种方法线号有时会较 ...…

查看全部问答>

IPCWorks Asia 2008十月引领绿色制造潮流

从无铅、RoHS到无卤素,再到PoHS,业界对环保材料的“门槛”越设越高,未来的绿色之路将走向何处?今年10月15-16日高交会电子展期间,品牌研讨会\"IPCWorks Asia\"将再次在深圳举办,本届会议的主题是\"无铅/无卤素制造\",届时众多业内无卤技术专 ...…

查看全部问答>

rt12864

我想rt12864所有的型号内部都是一样的吗?…

查看全部问答>

找两名兼职的WinCE内核和驱动开发人员

找两名兼职的WinCE内核开发人员,要求熟悉Marvell Xscale 系列CPU的内核和驱动开发工作, 要求熟悉一款以上以下的CPU: PXA255,PXA270,PXA310,PXA300,PXA320,PXA168. 地点在北京.有PDA或智能手机开发经验的人最佳. 熟悉三星的S3C6410的也可以,我 ...…

查看全部问答>

SqlCE PULL正常 SubmitSql也是正常的. 但是在 PUSH时出错. 请会的指点一下.

程序如下:             string _strRemoteConnect = \"provider=sqloledb;data source=192.168.1.99;Initial Catalog=zls;User ID=sa;\";             SqlCeRe ...…

查看全部问答>

用VHDL设计一个倒计时计数器,预置一个四位十进制数

有冇朋友EDA编程叻噶??帮帮手啊·~~        用VHDL设计一个倒计时计数器,预置一个四位十进制数,每个时钟脉冲到来减1,减到0即停止,发出时间到的报警信号。报警时,用50hz驱动蜂鸣器,发出报警声音。只提供一个1khz信号的 ...…

查看全部问答>

CETK怎么测试第三方的WIFI驱动??(急求)

小弟超菜 现在领的任务是用CETK测试无线网卡驱动 系统wince5.0,无线网卡i8686 开发板是自己公司做的,上面带的无线网卡驱动不是微软cetk中默认测试例子,看说明这种第三方驱动需要自行加入CETK 眼下问题关键就是怎么把Tux.dll和驱动的.dll连接 ...…

查看全部问答>

“运放”/“运算放大器”技术问答精粹

转自:电子工程专辑 运放是运算放大器的简称。在实际电路中,通常结合反馈网络共同组成某种功能模块。由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”,此名称一直延续至今。运放是一个从功能的角度命名的电路单元,可以由分 ...…

查看全部问答>

ST编译设置问题

在用ST工程时,编译设置改为: Memory 选择 Long Stack(+modsl) 就会出现下面问题: #error clnk Debug\\stm8s208.lkf:1 symbol f__stext not defined(Debug\\stm8_interrupt_vector.o ) The command: "clnk -m Debug\\stm8s208.map -l"C ...…

查看全部问答>