随笔分类 -  ARM裸机

摘要:一. 为什么需要代码重定位 1.1. 链接地址和运行地址不同 1.1.1. 只有位置无关编码才能在运行地址和链接地址不同的情况下运行。 a. 位置无关编码(PIC,position independent code):汇编源文件被编码成二进制可执行程序时编码方式与位置(内存地址)无关。 b. 位置有 阅读全文
posted @ 2019-01-08 00:37 三七鸽 阅读(566) 评论(0) 推荐(0)
摘要:一. 为什么需要链接脚本 1.1. 从源码到可执行程序(主要有三个步骤:预编译、编译、链接) 1.1.1. 预编译 a. 预编译器执行。譬如C中的宏定义就是由预编译器处理,注释等也是由预编译器处理的。 1.1.2. 编译 a. 由编译器来执行。把源码.c .S编程机器码.o文件。所以可以看到每个源码 阅读全文
posted @ 2019-01-07 23:35 三七鸽 阅读(1323) 评论(0) 推荐(0)
摘要:一. 设置栈 1.1. C语言运行时需要和栈的意义 1.1.1. “C语言运行时(runtime)”需要一定的条件,这些条件由汇编来提供。C语言运行时主要是需要栈 1.1.2. C语言与栈的关系 a. C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给C部分预先设置合理合法的栈地址,那么C代 阅读全文
posted @ 2019-01-07 00:06 三七鸽 阅读(568) 评论(0) 推荐(0)
摘要:一. 反编译(反汇编)简介 1.1. 为什么要反编译(汇编 assembly 反汇编 dissembly) 1.1.1. 反编译原因如下: a. 逆向破解程序,作为一个有逼格,素养的我肯定不会这么干的。哈哈 b. 调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使用objdump主要目的是这个 阅读全文
posted @ 2019-01-06 23:08 三七鸽 阅读(909) 评论(0) 推荐(0)
摘要:一. ARM裸机之Makefile 1.1. Makefile 分析 led.bin: led.o arm-linux-ld -Ttext 0x0 -o led.elf $^ arm-linux-objcopy -O binary led.elf led.bin arm-linux-objdump 阅读全文
posted @ 2019-01-06 22:47 三七鸽 阅读(1642) 评论(0) 推荐(0)