【问题标题】:Windows Assembly Doubt - x86Windows 程序集怀疑 - x86
【发布时间】:2010-10-06 18:48:24
【问题描述】:

我正在构建一个没有任何宏的 Windows 汇编程序。所以我下载了一个使用宏的程序,并将其转换为“纯”汇编代码。

但是我在这里面临一个问题。有一个标签@@: 我看不懂,还有一个跳转jne @F 我没听懂。这2个符号是什么?

MyWndProc:

    push ebp
    mov ebp, esp

    cmp DWORD PTR [ebp+12], 2 ;WM_DESTROY=2
    jne @F
      push ecx
      push NULL
      mov dword ptr ecx, 7e42ca5ah ;address of PostQuitMessage
      call ecx
      pop ecx
    @@:

    push DWORD PTR [ebp+20]
    push DWORD PTR [ebp+16]
    push DWORD PTR [ebp+12]
    push DWORD PTR [ebp+8]
    call DefWindowProc
    ;mov dword ptr edx, 7e42c17eh
    ;call edx

    leave
    ret 16

对于PostQuitMessage API,我也可以对内存地址进行硬编码(在 WinXP 32 位 SP3 英文版上),但对于 DefWindowProc,它可以编译,但在执行时会中断。有人知道为什么吗?

感谢大家的支持。

PS.:我正在使用 masm32

【问题讨论】:

  • 为什么“没有任何宏”?
  • 为什么?两个原因: 1) 我想查看 Windows 二进制文件的详细信息。 2) 我想在 C 程序中构建一个汇编程序。为什么?我只是一个非常好奇的人......
  • 硬编码地址 = no-no.
  • @Jens Björnhager:我知道这不是一个好习惯,但正如我上面解释的,这更多是出于好奇。我希望这段代码没有链接器的东西(至少我需要确保这是可能的)。我认为这是可能的,因为我在代码中硬编码了几个 API 的地址,仅用于 DefWindowProc 它不起作用...不知道为什么 :(
  • 您可以通过实际使用汇编程序来免费编写链接器。

标签: assembly windows-xp masm32


【解决方案1】:

@@ 是一个匿名的本地标签。您可以在文件中包含其中的许多jne @F 表示跳转到当前位置之前最近的@@

【讨论】:

  • 没有更多代码无法告诉您。 DefWindowProc 是你的另一个例程吗?
  • 不,DefWindowProc 这是一个 Windows API。该例程负责获取 Windows 消息...我使用 arwin 工具在我的机器上找到了它的地址,但这是我无法硬编码的唯一 API ..但我不知道为什么我不能和PostQuitMessage一样做...
  • 然后你需要为它做一个全局符号声明,然后使用链接器来确保一切都匹配。我不确定您是否可以依赖它始终具有相同的地址。不过,我不是 Windows API 专家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 2018-10-18
  • 2018-10-04
相关资源
最近更新 更多