NASM x86程序集中的GetModuleFileName

时间:2015-07-02 18:59:46

标签: winapi assembly x86 nasm

这是代码......

extern GetStdHandle
extern GetModuleFileNameW
extern WriteFile
extern ExitProcess

import GetStdHandle kernel32.dll
import GetModuleFileNameW kernel32.dll
import WriteFile kernel32.dll
import ExitProcess kernel32.dll

global ..start

segment .code USE32

..start:

push dword -11
call [GetStdHandle]
mov dword [hStdOut], eax

;Getting the filepath of exe on disk...
push dword 256 ;MAX_PATH
push dword [filepath] ;Pointer to the buffer
push dword 0 ;NULL
call [GetModuleFileNameW]

;Trying to output the filepath...
push dword 0
push dword nBytes
push dword 256 ;MAX_PATH
push dword filepath
push dword [hStdOut]
call [WriteFile]

xor eax, eax
push eax
call [ExitProcess]

segment .data

segment .bss
hStdOut resd 1
nBytes resd 1
filepath resd 32

我已经玩了一下,我得到的只是一个空白输出。当我稍微玩一下时,我也得到了一堆胡言乱语。仍然没有文件路径,仍然没有快乐。我有预感,我对GetModuleFileNameW做错了什么,但我无法确定。我按照微软网站上的文档进行操作,并按照你在汇编语言中应该采用的相反顺序放置参数。我做错了什么?

1 个答案:

答案 0 :(得分:1)

;Getting the filepath of exe on disk...
push dword 256 ;MAX_PATH
push dword [filepath] ;Pointer to the buffer
push dword 0 ;NULL
call [GetModuleFileNameW]

...必须改为......

;Getting the filepath of exe on disk...
push dword 256 ;MAX_PATH
push dword filepath ;Pointer to the buffer
push dword 0 ;NULL
call [GetModuleFileNameW]