assembly x86_64程序集中的分段错误,代码位于.text部分:(节名称中带有冒号)

ycl3bljg  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(144)

为什么会出现分段错误?
我使用nasm -f elf64 t.asm -o t.old t.o -o t在linux上编译。
我能想到的都做了。

section .data:
  variable_int db 1
  variable_string db "yaaaa", 10
section .text:
  global _start
_start:
  mov rax, 1
  mov rdi, 1
  mov rsi, variable_string
  mov rdx, 14
  syscall
  mov rax, 60
  mov rdi, 0
  syscall
brvekthn

brvekthn1#

section .data:
section .text:

省略冒号。节指令不是标签,冒号被分析为节名称的一部分。这会导致您的数据被放入名为.data:的节中,而链接器需要的是名为.data但不带冒号的节。这可能会导致为该节授予错误的权限(例如,不可执行的.text:节)。
还有:

mov rdx, 14

此参数是要写入的数据的长度,您的字符串不是14个字节长;这可能会导致写入额外的垃圾(可能是也可能不是可见字符),或者如果运行到未Map的内存中,则可能会导致系统调用失败。

相关问题