MDK_main()代码执行过程分析
1.1 __main()代码执行分析
以keyled程序为例说明,keyled代码请参考我的博客网址:http://my.csdn.net/wfq0624/code/detail/7645
程序经过汇编启动代码,执行到__main()后,可以看出有两个大的函数:
__scatterload():负责把RW/RO输出段从装载域地址复制到运行域地址,并完成了ZI运行域的初始化工作。
__rt_entry():负责初始化堆栈,完成库函数的初始化,最后自动跳转向main()函数。
分析__scatterload()函数
执行到__main(),先跳转到_scatterload下图红框框中代码所示,执行完后,R10和R11就被赋给成了下面两个值。
Map文件中的symbol
Region
Base 0x00000394 Number 0 anon
Table)
Region
Limit 0x000003b4 Number 0 anon
Table)
然后执行_scatterload_null代码,将R10对应地址存放的的4个字copy到R0~R3中,可以看出
R0:0x1000表示的是keyled.o加载域起始地址
R1:0x30000100为keyled.o运行域地址
R2:0X160为copy的大小,keyled.o的大小从map文件中得知就是0x160 Byte
R3:0X1E4 是_scatterload_copy 代码的起始地址,实用BXR3 就能跳转到_scatterload_copy来复制代码。
跳到_scatterload_copy,开始copy,循环0x16次,每次搬移4个字(16Byte),共搬移0x16*0x10=0x160
复制完keyled.o代码后,进一步循环到_scatterload_null准备好,ZI段需要清零的地址和范围
执行完这个循环后
R1:0x30050000 为ZI段的起始地址
R2:0x618为ZI段大小,换成十进制是1560.从map文件得知ZI大小就是1560Byte
R3:0x20c 为_scatterload_zeroinit 的地址
执行下面红框框中循环体,共清零0x610Byte范围,然后再执行蓝框框中代码,清零8Byte,总共0x618
ZI段清零(0x30050000~0x30050618)
然后使用BX R14跳转到0x000001BC处,顺序执行到BL __rt_enty 指令
成功跳转到__rt_enty函数
分析__rt_entry()函数
先调用__user_setup_stackheap()函数来建立堆栈
可以看出在这个函数中,会执行到BL__user_initial_stackheap()函数,这样也就明白了,为什么使用分散加载文件,需要设置__user_initial_stackheap这个函数来设置堆栈空间。
原文出处:点击打开链接https://blog.csdn.net/wangfoquan/article/details/7650988
MDK_main()代码执行过程分析相关推荐
- Ansible执行过程分析、异步模式和速度优化
Ansible系列(七):执行过程分析.异步模式和速度优化 分类: Linux服务篇 undefined 我写了更完善的Ansible专栏文章:一步到位玩儿透Ansible Ansible系列文章:h ...
- 4. 系统调用执行过程分析
##################################### 作者:张卓 原创作品转载请注明出处:<Linux操作系统分析>MOOC课程 http://www.xuetang ...
- ART运行时Semi-Space(SS)和Generational Semi-Space(GSS)GC执行过程分析
Semi-Space(SS)GC和Generational Semi-Space(GSS)GC是ART运行时引进的两个Compacting GC.它们的共同特点是都具有一个From Space和一个T ...
- thinkphp5+远程代码执行_ThinkPHP5 5.0.23 远程代码执行漏洞
漏洞描述 ThinkPHP是一款运用极广的PHP开发框架.其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程 ...
- linux内核远程漏洞,CVE-2019-11815:Linux内核竞争条件漏洞导致远程代码执行
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版的计算机设备,如果内核版本小于5.0.8的话,将有可能受到一 ...
- WSS 代码执行的权限提升
WSS 代码执行的权限提升 概述: WSS 默认使用身份模拟执行代码,也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问.在大多数情况下,这种机制能够准确并严格地控制了标准权 ...
- ElasticSearch Groovy脚本远程代码执行漏洞
什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由 ...
- Linux包管理器apt/apt-get发现远程代码执行漏洞
研究人员Max Justicz日前发现了知名Linux包管理器apt/apt-get中的远程代码执行漏洞,该漏洞允许外部进行中间人攻击并获取root权限以执行任何代码.该漏洞已在最新版本apt修复,如 ...
- php5.3.8添加eaccelerator扩展 加速php代码执行效率
安装eaccelerator [root@localhost ~]# wget http://nchc.dl.sourceforge.net/project/eaccelerator/eacceler ...
最新文章
- rsync实现linux间同步
- 如何将adb shell里面查到的文件复制到本地电脑
- 【大学课程】数据结构知识点
- mysql yintint类型_MySQL服务器2 被嫌弃的胖子
- 【python】pycharm启动 一直index,无法运行
- rust笔记9 错误处理
- php自动加载 依赖,php自动加载
- 51单片机LCD12864程序移植到STM32F103C
- HeadFirstJava 4,5,6
- 阵列信号处理 窄带信号与包络
- 魔兽争霸如何修改快捷键
- 微擎修改服务器域名,微擎服务器ip地址修改
- 《管理长歌行》——青蛙与蜘蛛的对话
- Python爬取《少年的你》豆瓣短评
- C语言函数大全-- r 开头的函数
- Unity动态加载3D模型
- 如何进行创新流程的前端管理?
- 数字IC设计实现hierarchical flow之物理验证篇
- ESP32在电池供电时用ULP监测电池电压
- React从入门到入土
热门文章
- Axure8.0深入一点(篇)
- 【面试必备】javascript操作DOM元素
- 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
- 面试必备:缓存穿透,缓存雪崩的四种解决方案
- 北上广Java开发月薪20K往上,该如何做,需要会写什么
- 【Python】青少年蓝桥杯_每日一题_7.19_电梯用量
- 第九届蓝桥杯java B组—第六题递增三元组(详细介绍)
- linux内置变量大全,Linux进阶之bash编程四(内置变量)
- iphone11计算机出现问题,苹果11出现死机现象
- 接口java_JAVA 初识接口