Assembly qemu中模拟的ARM汇编程序在尝试写入有效内存地址时抛出SEGFULT
我有一个小武器装配程序,我正在尝试模拟:Assembly qemu中模拟的ARM汇编程序在尝试写入有效内存地址时抛出SEGFULT,assembly,memory,segmentation-fault,arm,qemu,Assembly,Memory,Segmentation Fault,Arm,Qemu,我有一个小武器装配程序,我正在尝试模拟: .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,
.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]
[...]
空:文件格式elf32 littlearm
第节的分解。正文:
00008000 :
...
00008040 :
8040:e59f0034 ldr r0,[pc,#52];807c
8044:e59f1034 ldr r1,[pc,#52];8080
8048:e59f0034 ldr r0,[pc,#52];8084
804c:e5801000 str r1[r0]
[...]
所以
\u stack\u start
实际上就在那里为什么内存区域无效?正如@fuz所解释的,我需要在\u stack\u start
之前添加.data
:
.data
.align 4
_stack_start:
[...]
正如@fuz所解释的,我需要在
\u stack\u start
之前添加.data
:
.data
.align 4
_stack_start:
[...]
无法写入
.text
部分。将变量放入.data
中。不能写入.text
部分。将变量放入.data
中。