【问题标题】:(FASM) How to call properly a WinAPI like FindFirstFile and FindNextFile without use invoke?(FASM) 如何在不使用调用的情况下正确调用 FindFirstFile 和 FindNextFile 等 WinAPI?
【发布时间】: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


【解决方案1】:

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

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

我希望我的问题的答案对遇到相同问题的其他人有用。

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2020-07-28
    • 2017-03-30
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多