代码之家  ›  专栏  ›  技术社区  ›  JbG

在MASM中,可以按0xFFFF0820CADBA78D键吗

  •  0
  • JbG  · 技术社区  · 3 年前

    我正在构建一个KMDF设备驱动程序(64位)项目,其汇编代码位于一个单独的目录中。ASM文件。我正在使用集成在Visual Studio 2019社区中的MASM(ml64.exe)编译器来构建。ASM转换为一个对象文件,并链接到64位项目。我正在尝试以下代码,它将imm64值推送到堆栈上。我得到了下面的错误。我怎样才能做到这一点?

    PUSH FFFF0820CADBA78D // 
    

    以上说明给出了以下错误

    Error   A2006   undefined symbol : FFFF0820CADBA78Dh
    
    1 回复  |  直到 3 年前
        1
  •  3
  •   fuz    3 年前

    回想一下,在MASM语法中,数字必须以数字开头(有关详细信息,请参阅MASM手册),并且必须后缀为 h ,表示十六进制数。所以正确的语法应该是

    PUSH 0FFFF0820CADBA78Dh
    

    那么请注意,没有 PUSH imm64 指令存在于amd64上。只能推送扩展到64位的32位常量符号。因此,这将无法组装。相反,首先将常数加载到寄存器中,然后将其推入。

    MOV RAX, 0FFFF0820CADBA78Dh
    PUSH RAX