第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

確定當(dāng)前進(jìn)程是否在 WOW64 中運(yùn)行或不在 Go 中運(yùn)行

確定當(dāng)前進(jìn)程是否在 WOW64 中運(yùn)行或不在 Go 中運(yùn)行

Go
白板的微信 2021-11-22 18:13:32
在 Windows 中,猜測(cè)當(dāng)前 32 位進(jìn)程是在 32 位還是 64 位架構(gòu)上運(yùn)行的官方方法是從 kernel32.dll調(diào)用IsWow64Process函數(shù),并查看它是否存在(據(jù)我了解文檔)。在 Go 中,我們可以使用syscall包調(diào)用在 dll 文件中導(dǎo)出的函數(shù),所以這是我的嘗試:package mainimport (    "fmt"    "os"    "syscall")func main() {    dll, err := syscall.LoadDLL("kernel32.dll")    if err != nil {        fmt.Println(err)    }    defer dll.Release()    proc, err := dll.FindProc("IsWow64Process")    if err != nil {        fmt.Println("Proc not found") // not a WOW64 so a 32 bit system?        fmt.Println(err)    }    fmt.Printf("%v\n", proc)    var handle uintptr = uintptr(os.Getpid())    var result uintptr    v, x, y := proc.Call(handle, result)    fmt.Printf("%v %v %v\n", v, x, y)    fmt.Printf("%v\n", result)}不幸的是,無(wú)論是否使用 WOW64 系統(tǒng)進(jìn)行測(cè)試都會(huì)在標(biāo)準(zhǔn)輸出中顯示相同的內(nèi)容:&{0x10ada110 IsWow64Process 2088961457}0 7 The handle is invalid.0我做錯(cuò)了什么?如何實(shí)現(xiàn)測(cè)試以確定我們的 32 位 Go 程序是在 64 位 CPU(WOW64)上的模擬 32 位上運(yùn)行還是在真正的 32 位 Windows 上運(yùn)行?
查看完整描述

3 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊

我相信問(wèn)題在于您的proc.Call. 的預(yù)期參數(shù)IsWow64Process是一個(gè) HANDLE,它與pid. 這就是為什么它表明句柄無(wú)效。

以下 SO 問(wèn)題How to get process handle from process id表示您需要OpenProcess在 pid 中調(diào)用passsing 并返回句柄。

編輯: GetCurrentProcess 在syscall 中定義。所以我認(rèn)為你可以用Getpid以下內(nèi)容替換通話:

handle, err := syscall.GetCurrentProcess()


查看完整回答
反對(duì) 回復(fù) 2021-11-22
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

好的,這是一個(gè)工作代碼:


package main


import (

    "syscall"

    "fmt"

    "unsafe"

)

func main() {

    dll, err := syscall.LoadDLL("kernel32.dll")

    if err != nil {

        fmt.Println("Can't load kernel32")

        fmt.Println(err)

    }

    defer dll.Release()

    proc, err := dll.FindProc("IsWow64Process")

    if err != nil {

        fmt.Println("Proc not found")

        fmt.Println(err)

    }

    fmt.Printf("%v\n",proc)


    handle, err := syscall.GetCurrentProcess()  

    if err != nil {

        fmt.Println("Handle not found")

        fmt.Println(err)

    }

    fmt.Printf("%v\n",handle)


    var result bool


    v, x, y := proc.Call(uintptr(handle), uintptr(unsafe.Pointer(&result)))


    fmt.Printf("%v %v %v\n",v,x,y)

    fmt.Printf("%v\n",result)

}

該result變種將是一個(gè)WOW64系統(tǒng)和假對(duì)于32位系統(tǒng)真。


查看完整回答
反對(duì) 回復(fù) 2021-11-22
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

你也可以使用 golang.org/x/sys/windows


package main


import (

    "fmt"

    "golang.org/x/sys/windows"

)


func main() {

    handle := windows.CurrentProcess()

    var isWow64 bool

    err := windows.IsWow64Process(handle, &isWow64)

    if err != nil {

        panic(err)

    }

    fmt.Println(isWow64)

}


查看完整回答
反對(duì) 回復(fù) 2021-11-22
  • 3 回答
  • 0 關(guān)注
  • 243 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)