变量访问被ARM架构安排的明明白白!
2. 反汇编结果:

由上图可知,每存储1个int型全局变量需要「8个字节」,
「literal pool (文字池)占用4个字节」
literal pool的本质就是ARM汇编语言代码节中的一块用来存放常量数据而非可执行代码的内存块。

使用literal pool (文字池)的原因
当想要在一条指令中使用一个 4字节长度的常量数据(这个数据可以是内存地址,也可以是数字常量)的时候,由于ARM指令集是定长的(ARM指令4字节或Thumb指令2字节),所以就无法把这个4字节的常量数据编码在一条编译后的指令中。此时,ARM编译器(编译C源程序)/汇编器(编译汇编程序) 就会在代码节中分配一块内存,并把这个4字节的数据常量保存于此,之后,再使用一条指令把这个4 字节的数字常量加载到寄存器中参与运算。
在C源代码中,文字池的分配是由编译器在编译时自行安排的,在进行汇编程序设计时,开发者可以自己进行文字池的分配,如果开发者没有进行文字池的安排,那么汇编器就会代劳。
「bss段占用4个字节」

每访问1次全局变量,总共需要3条指令,访问3次全局变量用了「12条指令」。

14. 通过当前pc值40008018偏移32个字节,找到xx变量的链接地址40008038,然后取出其内容40008044存放在r3中,该值就是xx在bss段的地址
15. 通过将立即数0x11即#17赋值给r2
16. 将r2的内容那个写入到r3对应的指向的内存,即xx标号对应的内存中
二、结构体代码反汇编
1. 修改main.c如下:
2 * main.c
3 *
4 * Created on: 2020-12-12
5 * Author: 一口Linux
6
7 struct
8 {
9 int xx;
10 int yy;
11 int zz;
12 }peng;
13 int main(void)
14 {
15 peng.xx=0x11;
16 peng.yy=0x22;
17 peng.zz=0x33;
18
19 while(1);
20 return 0;
21 }
图片新闻
最新活动更多
-
4月17日立即报名 >> 【线下论坛】新唐科技×芯唐南京 2026 年度研讨会
-
4月22日立即报名>> 【在线会议】ADI六款仪器仪表方案助力产品快速上市
-
即日-4.30立即下载>>> 【限时下载】《2025激光行业应用创新发展蓝皮书》
-
5月14日立即下载>> 【白皮书】村田室内外定位解决方案
-
5月29日立即下载>> 【白皮书】工业视觉AI实战白皮书合集
-
5月30日立即报名>> 2026激光行业应用创新发展蓝皮书火热招编中!
推荐专题
- 1 2026,中国工程机械的“分水岭之战”
- 2 海康威视:用“集分式”架构搭建轻、减、省的指挥中心大屏显控系统
- 3 智赋食饮新局:《威图赋能食品饮料行业高效可持续发展白皮书》发布会即将开启!
- 4 开春来深圳,看全球先进精密制造!2026 ITES深圳工业展,即将启幕!
- 5 SEMICON CHINA 2026首日,格创东智携“章鱼智脑”和全场景工业智能体群,开启半导体智造自主决策时代
- 6 格创东智SEMICON CHINA 2026圆满收官,章鱼智脑与全场景智能体群定义工业智能决策新高度
- 7 智启新程,聚势前行,2026 ITES深圳工业展盛大启幕!
- 8 格创东智何军登榜2025福布斯中国科创人物,工业AI革新力获权威认可
- 9 工业 CLAW 破局:“章鱼智脑”,智能工厂仿生式自主决策中枢
- 10 丰田汽车公司为实现碳中和制定的动力总成多路径策略PPT


分享














发表评论
登录
手机
验证码
手机/邮箱/用户名
密码
立即登录即可访问所有OFweek服务
还不是会员?免费注册
忘记密码其他方式
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论