[英]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.