【发布时间】:2014-08-18 16:28:36
【问题描述】:
我的问题如下:我有一个程序在当前目录中寻找特定的文件扩展名。如果我使用 FASM 中包含的调用宏,则该代码有效。但是我需要直接使用调用指令调用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
拜托,有人可以解释一下如何正确调用像 FindFirstFile 和 FindNextFile 这样的 WinAPI 吗?感谢您的回答。
【问题讨论】:
-
invoke扩展为什么?如果你使用invoke编译代码然后反汇编,你会看到什么? -
@xmojmr 感谢您阅读我的问题;我看到了我使用的片段之类的代码。
-
1) 为了获得帮助,请提供Minimal, Complete and Verifiable example 2) 必须为FindFirstFile 分配
lpFindFileData参数由你 3) 获得一个好的调试器并调试,进入,检查内存,比较有效的代码(invoke)和你的代码,每一点都是不同的。汇编语言是关于位完美的编码 -
@xmojmr 感谢您的回答。我解决了将 API 名称括在方括号中的问题,例如 [FindFirstFile]。我相信 API 名称是一个指针。我说的对吗?
-
从您的简约代码中看不到它,但通常如果您将 API 名称链接为 PE 导入表中的条目 (win32assembly.programminghorizon.com/pe-tut6.html) 或作为函数,API 名称将是一个“指针”由LoadLibrary & GetProcAddress 动态加载。无论如何,您应该能够在Tomasz Grystarsz's Flat Assembler Message Board 找到一些有用的答案
标签: winapi calling-convention fasm