【发布时间】:2014-03-10 00:29:40
【问题描述】:
好的,我尝试使用 kernel32.dll 中的 DeleteFile 方法(使用 nasm 汇编程序),但它并没有删除文件,而是出现错误退出。
extern _GetStdHandle@4
extern _WriteConsoleA@20
extern _DeleteFileA@4
extern _ExitProcess@4
section .data
msg: db "Could not delete the file", 10, 0
len: equ $- msg
section .bss
numCharsWritten resb 1
section .text
global _start
_start:
mov edx, [esp+8]
push dword [edx] ; pushes argument.
call _DeleteFileA@4 ; deletes file
add esp, 8 ; removes 2 arguments
cmp eax, 0 ; <cmp> = (eax == 0)
je _error ; if(<cmp>) jump to _error
push dword 0x0A ; exit value
call _ExitProcess@4 ; exit
_error:
push dword -0x0B
call _GetStdHandle@4
push dword 0 ; Arg4, unused
push numCharsWritten ; Arg3, POINTER to numCharsWritten
push dword len ; Arg2, length of the string
push msg ; Arg1, the string
push eax ; Arg0, _GetStdHandle@4
call _WriteConsoleA@20 ; Writes the string
push dword 0x0A ; exit code
call _ExitProcess@4 ; exit
它只是打印无法删除文件,然后退出。这段代码有错误吗?
【问题讨论】:
-
add esp, 8一个,你似乎没有给它一个论点。 -
您确信您已正确地从命令行中获取了文件名吗?我想你可能想要
push [edx + 4]...但我不做 Windows。