屌丝学arm汇编-05-编译器如何利用pc指针生成PIC(位置无关码)
来源:互联网 发布:如果注册域名 编辑:程序博客网 时间:2024/06/09 23:27
首先来2个问题
1.编译器如何处理伪指令,例如ldr。首先伪指令不是真实的指令,这样说有些模糊。伪指令的执行者不是arm cpu,而是编译器。这个描述准确点,但是编译器只是把伪
指令做了转化,转化成arm指令,最终还是有arm cpu来执行。在C语言中 #define TEST (5 - 3) 这里(5- 3)会由编译器计算好,将结果放到最终生成的执行程序中,一般在code的.text段,再最终由arm cpu来执行。
2.编译器和arm 在生成PIC位置无关码中,各自做了哪些事情,是我这个demo想去演示。
demo的作用通过一个buf指针,利用pc指针和buf的相对便宜来对buf进行定位,并完成对其中数据的修改。
下载路径:http://download.csdn.net/detail/losting_boy/9620735
AREA addr01, CODE, READONLY entry CODE32 startldr r0, =(testcode16 + 1)BXr0CODE16testcode16mov r5,#1ldr r3,=handleBuf_ptr - 0x8016 ;(1)注意这里LSLS r5,r5,#2add r3,pc<span style="white-space:pre"></span>;通过pc 来加上 dcd 的<span style="font-family: Arial, Helvetica, sans-serif;">handleBuf_ptr 于当前的位置偏移来获取变量地址</span>ldr r3,[r3] ;对<span style="font-family: Arial, Helvetica, sans-serif;">handleBuf_ptr进行取值,获得最终buf的地址,存到r3</span>tagmovs r1,#0x80 ;这里的地址是0x8016str r0,[r5,r3]stopb .AREA data1,DATA,READWRITEhandlebuf DCB 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4handleBuf_ptr DCD handlebufEND
注意点:
(1)0x8016怎么来的,由编译器计算得来,这里是我模拟编译器,通过反编译计算得来。
(2)ldr r3,=handleBuf_ptr - 0x8016,因为ldr是伪指令,编译器翻译成了 ldr r3,0x8028,这里0x8028存储的是编译器计算的结果,如下,arm cpu执行从这个地址取结果
(3)thumb pc = 当前执行地址 + 4, code 32 pc = 当前 + 8 ,具体不解释
(4)handlebuf代表一个buf的首地址,handleBuf_ptr是指向handlebuf的指针。这里可以理解为标号,等效于地址。cpu是不区分那些是指针,哪些是指针的指针啥的,只是内存地址和地址中存放的数据
几个坑:
坑1:ldr r3,=handleBuf_ptr - 0x8016 ,换成ldr r3,=(handleBuf_ptr - 0x8016)结果不对
坑2:ldr r3,=handleBuf_ptr - 0x8016 ,换成ldr r3,=(handleBuf_ptr - tag)结果不对
具体原因,这部分要看编译器如何处理。不深究,不同编译器处理有些许差异。
- 屌丝学arm汇编-05-编译器如何利用pc指针生成PIC(位置无关码)
- ARM 位置无关代码(PIC)的分析理解
- 位置无关代码(PIC)的思考
- 位置无关代码(PIC)的思考
- 位置无关代码(PIC)的思考
- 位置无关代码(PIC)的思考
- 位置无关代码(PIC)的思考
- 位置无关代码(PIC)的思考
- 位置无关(PIC)代码原理剖析
- 位置无关代码(PIC)的思考
- 位置无关(PIC)代码原理剖析
- 位置无关代码PIC
- Arm汇编 位置无关代码 adr 指令
- Arm汇编 位置无关代码 adr 指令
- Arm汇编 位置无关代码 adr 指令
- Arm汇编 位置无关代码 adr 指令
- Arm汇编 位置无关代码 adr 指令
- ARM裸机编程 (汇编运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码)
- 9月2号模拟总结
- 菜鸟学习物联网---辨析基于Andriod 5.1,Linux,Windows10开发Dragon Board 410c板
- SQL之树形结构无限级联删除(转)
- 线程的并发所引起的问题
- MySql常用代码行
- 屌丝学arm汇编-05-编译器如何利用pc指针生成PIC(位置无关码)
- 292. Nim Game
- 1035. 插入与归并(25)
- 特权级代码段之间的转移---任务内无特权级变换的转移
- cygwin和mingw的区别
- sphinx 关于xmlpipe_attr_multi 标签搜索
- 云南之行
- Android文件管理器
- NPM problem: npm ERR! extraneous