(FASM)如何在不使用invoke的情况下正确调用WinAPI(如FindFirstFile和FindNextFile)?

(FASM)如何在不使用invoke的情况下正确调用WinAPI(如FindFirstFile和FindNextFile)?,winapi,calling-convention,fasm,Winapi,Calling Convention,Fasm,我的问题如下:我有一个程序,在当前目录中查找特定的文件扩展名。如果我使用FASM中包含的invoke宏,代码就会工作。但是我需要直接使用call指令调用winAPI,并将它们的参数推送到堆栈中 我尝试过这个,但不起作用并使我的程序崩溃: ;Push parameters for the function push FIND_STRUCT ;Put in the stack the address of FIND_STRUCT push file_extension ;File exte

我的问题如下:我有一个程序,在当前目录中查找特定的文件扩展名。如果我使用FASM中包含的invoke宏,代码就会工作。但是我需要直接使用call指令调用winAPI,并将它们的参数推送到堆栈中

我尝试过这个,但不起作用并使我的程序崩溃:

;Push parameters for the function
push FIND_STRUCT     ;Put in the stack the address of FIND_STRUCT
push file_extension  ;File extension
call FindFirstFile   ; find the first *.fly

请告诉我如何正确调用WinAPI,比如FindFirstFile和FindNextFile,好吗???谢谢您的回答。

我发现API名称可能是指针。如果我是对的,调用API名称的方法是将API名称括在方括号中,如下所示:
[API\u name]
。这个技巧至少对我和我的FASM汇编器有效

如果不使用方括号,则调用的是指针的地址,而不是指向的地址。因此,请使用方括号并将API名称括起来,以调用API地址,而不是其指针地址


我希望我的问题的答案能对其他有同样问题的人有用。

调用
的扩展是什么?如果您使用
invoke
编译代码,然后将其反汇编,您会看到什么?@xmojmr感谢您阅读我的问题;我看到的代码与我使用的片段类似。1)为了获得帮助,请提供2)必须由您分配的的的
lpFindFileData
参数3)获得良好的调试器并进行调试,进入内存,检查内存,比较有效的代码(调用
和您的代码,每一位都不同。汇编语言有点完美coding@xmojmr谢谢你的回答。我解决了将API名称括在方括号中的问题,如[FindFirstFile]。我相信API名称是一个指针。我说的对吗???它在你的简约代码中是不可见的,但是如果你将它链接为PE导入表()中的一个条目,或者作为一个动态加载的函数,那么通常API名称将是一个“指针”。无论如何,你应该能够在网站上找到一些有用的答案