打算为入门ARM指令集写点初级文章,没什么远大理想,纯当娱乐算了。
首先编辑一个最简单的函数,包含变量分配及初始化:test1.c
#include <stdio.h>
void main()
{
int d = 4;
}
然后编译:arm-linux-gnueabihf-gcc test.c -o test1
然后看看汇编代码:arm-linux-gnueabihf-objdump -D test1;每一句的含义我已经给出详细注释。
首先对输出的文件格式说明,对于如下的输出,左边是程序地址(各种函数地址等等),第二列是指令码的十六进制表示也俗称机器码,剩下的就是给人类看的指令助记符号,举例举例:
835c: b480 push {r7}
这里,835c是main函数的地址,b480是机器码表示的指令,push {r7}就是给我们人类看的了。下面看test1的输出:
0000835c <main>:
程序用到了r7寄存器,所以需要保护以免破