我有一个NASM程序集程序,运行时会创建一个可执行文件并执行它。
section .data
File db "Open",0
section .text
global _start
_start:
mov rax, 2 ; Open the file/ Create it
mov rdi, File
mov rsi, 65
mov rdx, 777
syscall
push rax
mov rdi, rax ; Write to the file
mov rax, 1
mov rsi, 0x600300 ; Location of where the appended data is
mov rdx, 900
syscall
mov rax, 3 ; Close the file
pop rdi
syscall
mov rax, 59 ; Execute the file
mov rdi, File
syscall
mov rax, 60 ; Close out of the program
mov rdi, 0
syscall
我尝试在关闭文件之前执行文件,然后得到相同的输出(没有)。我写的文件是正确格式的可执行文件,如果我运行./打开它打印出Hello。如果我只做一个像
这样的简单程序section .data
File db "Open", 0
section .text
global _start
_start:
mov rax, 59 ; Execute the file
mov rdi, File
syscall
它按照我的意愿执行程序。为什么当我先打开文件并写入文件时它不会执行它?为了澄清我附加了正在写入0x300的可执行文件,并且写入的文件是可执行的。