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

标签 assembly arm raspberry-pi

使用 ARM 程序集写入内存时出现问题。

我正在使用 Raspberry Pi (Raspbian) 和 GNU 汇编器。

首先.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正确。

最佳答案

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

在汇编中保留内存的最简单方法是创建一个数据段。在很多汇编语言中,数据段都是以.data开头的,但是我已经很久没有使用ARM汇编了,请验证一下。一旦在数据段中保留了一些内存,就可以轻松获取“变量”的地址并写入它,就像您在示例中所做的那样。

关于assembly - ARM 汇编 - 写入内存 - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218548/

相关文章:

c - 我如何用我的内核创建可引导 CD 镜像?

windows - 从 Windows 到 ARM Linux 交叉编译 Rust

c++ - OpenCV v3.3.1 ARM 交叉编译失败 : No CMAKE_CXX_COMPILER could be found

linux - 如何在树莓派上安装 FreeRTOS?

c++ - 着色和调色板最佳拟合算法

ios - 从 arm 汇编函数返回 float 到 objective-c

assembly - 在汇编中推送并打印浮点值

arm - NEON :float32x4_t 向量中最多四个浮点值

python - 如何在树莓派完全启动后自动运行 Python 脚本?

python - 用于 Python 的 OpenCV。错误 : no module named cv2