我有一个小型手臂装配程序,我试图模仿:
.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}
这个程序是在抛出一个seg。当它到达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
实际上就在那里。为什么那个内存区域无效?
发布于 2021-04-14 13:19:03
正如@fuz所解释的,我需要在.data
之前添加_stack_start
.data
.align 4
_stack_start:
[...]
https://stackoverflow.com/questions/67092426
复制相似问题