发布
社区首页 >问答首页 >在qemu中模拟的ARM程序在试图写入有效内存地址时抛出分段错误。

在qemu中模拟的ARM程序在试图写入有效内存地址时抛出分段错误。
EN

Stack Overflow用户
提问于 2021-04-14 13:08:29
回答 1查看 100关注 0票数 0

我有一个小型手臂装配程序,我试图模仿:

代码语言:javascript
代码运行次数:0
复制
.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一起分配。此外,大会还显示了以下内容:

代码语言:javascript
代码运行次数:0
复制
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实际上就在那里。为什么那个内存区域无效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-14 13:19:03

正如@fuz所解释的,我需要在.data之前添加_stack_start

代码语言:javascript
代码运行次数:0
复制
.data
.align 4
_stack_start:
[...]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67092426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档