gpt4 book ai didi

arrays - .text .data 和 main 的段错误(.data 部分中的 main)

转载 作者:行者123 更新时间:2023-12-04 03:01:59 25 4
gpt4 key购买 nike

我只是想将 myarray[0] 的值加载到 eax:

        .text
.data

# define an array of 3 words
array_words: .word 1, 2, 3

.globl main

main:
# assign array_words[0] to eax
mov $0, %edi
lea array_words(,%edi,4), %eax

但是当我运行它时,我不断遇到段错误。有人可以指出我在这里做错了什么吗?

最佳答案

标签 main 似乎在 .data 部分。

它会导致不允许在 .data 部分执行代码的系统出现段错误。 (大多数现代系统映射 .data 具有读取和写入权限,但没有执行权限。)

程序代码应该在.text 部分。 (阅读+执行)

令人惊讶的是,在 GNU/Linux 系统上,手写的 asm 通常会生成可执行文件 .data 除非你小心避免这种情况,所以这通常不是真正的问题:见 Why data and stack segments are executable? 但是将代码放在它所属的 .text 中可以使一些调试工具更好地工作。


您还需要从 main ret 或调用 exit(或进行 _exit 系统调用),这样执行就不会中断main 的结尾到下一个字节。见 What happens if there is no exit system call in an assembly program?

关于arrays - .text .data 和 main 的段错误(.data 部分中的 main),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com