我如何知道调用了哪个 Windows API 版本? [关闭]

Posted

技术标签:

【中文标题】我如何知道调用了哪个 Windows API 版本? [关闭]【英文标题】:How do I know which Windows API version is called? [closed] 【发布时间】:2021-01-08 00:09:46 【问题描述】:

如果我要设置多个断点,我如何知道程序是否在没有暴力破解的情况下调用了 A 或 W 版本?

【问题讨论】:

你的问题没有多大意义,对不起。你在哪里设置断点? A 版还是 W 版? @JonathanPotter 例如,如果程序使用 LoadLibraryA 或 LoadLibraryW 【参考方案1】:

只需在两个版本上设置断点即可。

任何程序都可以同时使用 ANSI 和 Wide 版本,只要明确指定哪一个。

【讨论】:

A 是 ANSI 的缩写,而不是 ASCII。【参考方案2】:

我创建一个简单的例子:

#include <Windows.h>

int main(int argc, const char* argv[])

    MessageBox(NULL, TEXT("test"), TEXT("test"), 0);
    return 0;

MessageBox处设置断点,然后在反汇编中进入MessageBox

如果你使用Multi-Byte Character Set,你可以看到:

当你使用Unicode Character Set:

你可以通过反汇编很容易看到它调用了哪个函数。

【讨论】:

【参考方案3】:

如果您在进入给定函数调用之前在其外部放置断点,那么当到达断点时,您可以单步执行调用以查看实际跳转到的函数。

如果你在两个函数中都设置了断点,你会很容易看出调用了哪一个。

【讨论】:

以上是关于我如何知道调用了哪个 Windows API 版本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的哪个 Windows API 将帮助我识别当前 ComboBox 正在使用哪个对话框类?

api在windows系统下哪个文件夹里?

Windows中的Qt Creator - 我如何知道正在使用哪个编译器?

如何知道要使用哪个版本的 GitHub Action

我如何知道哪个版本的 Xcode/哪个 SDK 构建了 xcarchive?

如何从Windows服务调用REST API