簡體   English   中英

x86_64 程序集寫入部分 .data 中的分段錯誤:

[英]Segmentation fault in x86_64 assembly writing into section .data:

為什么會出現分段錯誤?

我正在使用nasm -f elf64 t.asm -o to ld to -ot在 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
section .data:
section .text:

省略冒號。 節指令不是標簽,冒號被解析為節名的一部分。 這會導致您的數據被放入一個名為.data:的部分,而鏈接器需要一個沒有冒號的名為.data的部分。 這可能會導致該部分被賦予錯誤的權限(例如,不可執行的.text:部分)。

還:

mov rdx, 14

這個參數是要寫入的數據的長度,你的字符串不是14字節長; 它只有 6。這可能會導致寫入額外的垃圾(可能是也可能不是可見字符),或者如果這運行到未映射的內存中,則可能導致系統調用失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM