uboot解决重定位后链接地址和运行地址不一致的方法

简介: uboot解决重定位后链接地址和运行地址不一致的方法
//示例代码 arch/arm/config.mk文件代码段
 needed for relocation
//设置 uboot 链接选项,加入了“-pie”选项,编译链接 uboot 的时候就会使用到“-pie”
 LDFLAGS_u-boot += -pie

uboot 对于重定位后链接地址和运行地址不一致的解决方法就是采用位置无关码

使用“-pie”选项以后会生成一个.rel.dyn 段,

uboot 就是靠这个.rel.dyn 来解决重定位问题的,在 u-bot.dis 的.rel.dyn 段中有如下所示内容

//示例代码 .rel.dyn 段代码段
Disassembly of section .rel.dyn: 
8785da44 <__rel_dyn_end-0x8ba0>:
8785da44: 87800020 strhi r0, [r0, r0, lsr #32]
8785da48: 00000017 andeq r0, r0, r7, lsl r0
......
8785dfb4: 87804198 ; <UNDEFINED> instruction: 0x87804198
8785dfb8: 00000017 andeq r0, r0, r7, lsl r0

先来看一下.rel.dyn 段的格式,类似第 7 行和第 8 行这样的是一组,也就是两个 4 字节数据为一组。

高 4 字节是 Label 地址标识 0X17,低 4 字节就是 Label 的地址,首先判断 Label 地址标识是否正确,也就是判断高 4 字节是否为 0X17,如果是的话高 4 字节就是 Label 值。

第 7 行值为 0X87804198,第 8 行为 0X00000017,说明第 7 行的 0X87804198 是个 Label,

这个正是示例代码  中存放变量 rel_a 地址的那个 Label。

目录
相关文章
|
2月前
|
自然语言处理 编译器 调度
深入gcc编译器:C/C++代码如何变为可执行程序
深入gcc编译器:C/C++代码如何变为可执行程序
108 0
|
8月前
|
C++
【c++】c++ 编译链接成的可执行程序 执行时却表示无法找到某个或几个库
问题描述:c++ 程序已经完成了编译链接,但是在执行时,提醒说某个 库 地址找不到,无法启动进程服务。 使用 ldd 命令 查看执行程序 可以看到 存在 某个库 显示 not find
71 0
|
编译器 Linux C语言
在C语言/C++中把资源编译进exe可执行文件,并运行时释放资源
在C语言/C++中把资源编译进exe可执行文件,并运行时释放资源
340 0
|
Java
如何保存编译程序
如何保存编译程序
128 0
|
Java 图形学
Unity打包符号表 使用ndk addr2line.exe+符号表 将崩溃内存地址解析成函数名
符号表的路径,符号表发布出来的时候是一个zip文件要把它解压出来,里面会有两个文件:arm64-v8a(64位)、armeabi-v7a(32位)不过unity默认打包出来的都是64位的程序,所以这个前面加上你的真实路径+arm64-v8a\libil2cpp.sym.so就可以了。
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
|
编译器 C语言
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的
122 0
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的
|
开发工具 Android开发
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
365 0
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
|
Linux
在linux程序里面,知道一个函数地址,改函数是属于某个动态库的,怎么样得到这个动态库的全【转】
转自:http://www.360doc.com/content/17/1012/11/48326749_694292472.shtml 另外dl_iterate_phdr可以查到当前进程所装在的所有符号,每查到一个就会调用你指定的回调函数。
892 0

热门文章

最新文章