1

我正在尝试确定运行我的应用程序的 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 

它只是在执行时崩溃。

检查布尔值的正确方法是什么,我是否正确执行了该部分?

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

4

1 回答 1

1

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

include "Win32AX.Inc"

否则 '64' 等将被解释为常量。

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

invoke     IsWow64Process,[hProcess],hResult
于 2012-10-16T15:01:46.227 回答