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

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

【问题讨论】:

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

标签: windows winapi x86 reverse-engineering


【解决方案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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多