在程序集中删除文件

时间:2016-11-24 08:11:13

标签: assembly x86 nasm

我正在尝试删除汇编代码(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

1 个答案:

答案 0 :(得分:5)

在Linux上,要删除文件(在UNIX术语中,要“取消链接”文件),您需要使用系统调用unlink。它唯一的参数是指向要取消链接的文件名的指针,它在成功时返回0,在错误时返回负值。 i386上unlink的系统调用号是10,所以要调用unlink,请编写如下代码:

mov eax, 10        ; system call 10: unlink
mov ebx, file_name ; file name to unlink
int 80h            ; call into the system

文件名应该是NUL终止的C字符串。您可以通过将,0附加到字符串来生成C字符串:

file_name    DB  "input.txt",0

请注意,此系统调用不能用于取消链接目录。要删除目录(这里“删除”用作删除目录比传统文件系统更复杂,只需取消链接它们),您需要使用rmdir系统调用,它具有数字40和相同的参数并返回值