assembly - 在 qemu 中模拟的 ARM 汇编程序在尝试写入有效内存地址时抛出段错误
问题描述
我有一个要模拟的小型 ARM 汇编程序:
.equ _STACK_SIZE, 64
.align 4
_stack_start:
.fill _STACK_SIZE, 1, 0
_stack_end:
.text
.global _start
_start:
ldr r0, =0x101
ldr r1, =0x102
ldr r0, =_stack_start
str r1, [r0]
push {r0,r1}
这个程序正在抛出一个段。到达str
线路时发生故障。据我了解,该指令正在写入一个有效的内存区域,该内存区域已分配有.fill
. 此外,拆卸显示以下内容:
empty: file format elf32-littlearm
Disassembly of section .text:
00008000 <_stack_start>:
...
00008040 <_start>:
8040: e59f0034 ldr r0, [pc, #52] ; 807c <_start+0x3c>
8044: e59f1034 ldr r1, [pc, #52] ; 8080 <_start+0x40>
8048: e59f0034 ldr r0, [pc, #52] ; 8084 <_start+0x44>
804c: e5801000 str r1, [r0]
[...]
_stack_start
实际上也是如此。为什么该内存区域无效?
解决方案
正如@fuz 所解释的,我需要在.data
之前添加_stack_start
:
.data
.align 4
_stack_start:
[...]
推荐阅读
- javascript - 道具更改时反应子组件不更新
- javascript - 如何将通过api收到的文件发送到谷歌驱动器nodejs
- mobile-application - 我应该选择哪种服务将网站转换为移动应用程序?
- jquery - jQuery追加到一个元素但在父元素的文本之后
- python - 以字符串形式获取 pandas 列名
- node.js - 未找到发送路线,
- sitefinity - sitefinity 参数 ActionResult 方法
- c# - unity c# for ... while ..代码崩溃,计算用户按键和用户按键的时间
- mysql - 当我运行以下命令时,GROUP BY 不工作:SELECT jobtitle,salary,COUNT(*) FROM employees GROUP BY 薪水;
- c# - Universal Analytics C# SDK 是否与 GA4 兼容?