FASM - IsWow64Process - 检查布尔结果

时间:2012-10-16 14:50:38

标签: 64-bit boolean 32bit-64bit 32-bit fasm

我正在尝试确定我的应用运行的PC是x64还是x86。

这是我目前的代码:

format PE GUI 4.0
include "Win32A.Inc"


entry start


section ".idata" import data readable writable

        library kernel32,"KERNEL32.DLL",user32,"USER32.DLL"

        import  kernel32,\
                IsWow64Process,"IsWow64Process",\
                GetCurrentProcess,"GetCurrentProcess",\
                ExitProcess,"ExitProcess"

        import  user32,\
                MessageBox,"MessageBoxA"

section '.data' data readable writeable

hProcess        dd ?
hResult         dd ?

section '.code' code readable executable

start:

        invoke     GetCurrentProcess
        mov        [hProcess],eax
        invoke     IsWow64Process,hProcess,hResult
        cmp        [hResult],1
        je         Is64
        cmp        [hResult],0
        je         Is32
        invoke     ExitProcess,0

Is64:

            invoke       MessageBox,0,'64','AR',0
            invoke       ExitProcess,0
Is32:

            invoke       MessageBox,0,'32','AR',0
            invoke       ExitProcess,0 

它只是在执行时崩溃。

检查布尔值的正确方法是什么,我正确地做了那个部分吗?

感谢您解决此问题的任何帮助。

1 个答案:

答案 0 :(得分:1)

为了能够声明内联字符串,您需要包含扩展标题:

include "Win32AX.Inc"

或者'64'等等将被解释为常量。

您也没有将hProcess作为值传递:

invoke     IsWow64Process,[hProcess],hResult