gpt4 book ai didi

assembly - 删除程序集中的文件

转载 作者:行者123 更新时间:2023-12-02 21:43:27 26 4
gpt4 key购买 nike

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

最佳答案

在 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

请注意,此系统调用不能用于取消链接目录。要删除目录(此处使用“removed”,因为在传统文件系统上删除目录比取消链接更复杂),您需要使用 rmdir 系统调用,该调用的编号为 40 且参数相同并返回值。

关于assembly - 删除程序集中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com