
编译与链接
hx_op
这个作者很懒,什么都没留下…
展开
-
应用程序及共享库的动态链接
加载原理应用程序与动态链接库的加载SylixOS中的应用程序与Linux并不相同,Linux每个进程用于独立的虚拟地址空间(32位机空间为4GB),SylixOS的内核与应用共享整个虚拟空间,这样的话就要求不同的应用程序不能占有相同的虚拟地址空间,SylixOS中的应用程序可以理解为与.so共享库一个道理,并没有执行链接操作,应用程序与.so具有两个相同的特点:两者都是位置无关码,编译时加...原创 2019-03-14 16:04:10 · 734 阅读 · 0 评论 -
LMA与VMA
VMA 即为运行地址,LMA 即为装载地址,在链接脚本中语法如下:.data ORIGIN(data) : AT(_etext) { . = ALIGN(4); PROVIDE (_data = .); *(.data) . = ALIGN(4); PROVIDE (_edata = .);} > DATA其中利用AT指定装...原创 2019-03-13 10:47:02 · 776 阅读 · 0 评论 -
SylixOS backtrace实现
SylixOS backtrace实现backtrace用于输出当前调用栈信息,根据这些信息可以知道程序运行流程,有助于分析bug实现原理下面分别以ARM平台(ARMV7-A)和x86平台(32位)为例,讲述backtrace实现原理。ARM平台实现这里先简单介绍下ARM平台下,c语言函数的调用过程,应用程序代码如下:#include <stdio.h>void fun...原创 2019-04-02 19:14:26 · 503 阅读 · 0 评论 -
动态装载简介
动态装载包括两个方面,一种是应用程序和系统的分离,第二个是动态库的实现,两者机制相似动态装载有两个特点:位置无关码共用代码段,而又有独立的数据段其中,位置无关比较容易实现,而有独立的数据段需要硬件支持才行1.位置无关码的实现首先,位置无关码通过引入.GOT 和 .PLT 来实现对 外部全局变量 或者 外部函数的引用,在访问.GOT和.PLT时用的都是相对跳转,然后再.GOT中使用绝...原创 2019-01-09 13:59:07 · 573 阅读 · 0 评论