ARM汇编 - 写入内存 - 分段错误

时间:2015-03-23 19:15:39

标签: assembly arm raspberry-pi

使用ARM Assembly写入内存时出现问题。

我正在使用Raspberry Pi(Raspbian)并使用GNU Assembler。

first.s:

.global main
.func main

main:
    ldr r5, =0x10000000
    mov r1, #19 
    str r1, [r5]
    bx lr

当我运行以上内容时:

pi@raspberrypi ~/assembly $ make first
as -o first.o first.s
gcc -o first first.o
pi@raspberrypi ~/assembly $ ./first ; echo $? > output.txt
Segmentation fault

如您所见,分段错误。 output.txt文件保存值139,我理解这是指分段错误。 内存地址无效吗? 我已经检查了datasheet和内存地址SEEMS。

1 个答案:

答案 0 :(得分:0)

存储空间有几种不同的“类型”。例如,在Windows系统上,有未提交,保留,只读,可执行等。写入未标记为“保留”的内存的任何部分,或者未指向有效内存地址的地址,导致seg故障。这是大多数现代系统的关键安全功能。我的猜测是你需要在写入内存之前保留内存才能成功完成。

在汇编中保留内存的最简单方法是创建数据段。在许多汇编语言中,数据段由.data继续,但我在很长一段时间内没有使用ARM汇编来验证。一旦在数据段中保留了一些内存,就可以轻松获取“变量”的地址并像在示例中一样写入它。