我试图删除汇编代码(NASM)中的文件,但我在"mov dx,file_name"部分遇到错误"重定位被截断以适应数据".仅供参考,我试图删除"input.txt"文件的文件确实存在于我的文件夹中.我对这类问题不太确定.让我知道我错过了哪里.
section.data
; filename
file_name DB "input.txt"
section .text
global _start
_start:
nop
mov dx, file_name ; getting an error : relocation truncated to fit R_386_16 against .data
mov ah,41h ; function 41h - delete file
int 21h ; call DOS service
endIt:
nop
;Exit the program back to linux legally
mov eax, 1 ; exit system call value
mov ebx, 0 ; exit return code
int 80h ; Call the kernel
Run Code Online (Sandbox Code Playgroud)
在Linux上,要删除文件(在UNIX术语中,要"取消链接"文件),您需要使用系统调用unlink.它唯一的参数是指向要取消链接的文件名的指针,它在成功时返回0,在错误时返回负值.unlinki386上的系统调用号是10,所以要调用unlink,编写如下代码:
mov eax, 10 ; system call 10: unlink
mov ebx, file_name ; file name to unlink
int 80h ; call into the system
Run Code Online (Sandbox Code Playgroud)
文件名应该是NUL终止的C字符串.您可以通过附加,0到字符串来创建C 字符串:
file_name DB "input.txt",0
Run Code Online (Sandbox Code Playgroud)
请注意,此系统调用不能用于取消链接目录.要删除目录(此处"删除"用作删除目录,而传统文件系统更多地涉及而不仅仅是取消链接),您需要使用rmdir系统调用,其编号为40且具有相同的参数和返回值.
| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |