-
雖然我不想說(shuō)“我是傻X”,但是這事真的太蠢了。
我想在C#里獲取某個(gè)進(jìn)程的DLL的基址,于是直接谷歌搜索:

一眼看過(guò)去全都是意義不明的結(jié)果,于是開(kāi)始自己折騰。
最終的代碼長(zhǎng)這個(gè)樣子:
但是Module32FirstW一直返回False,我一直認(rèn)為是那個(gè)結(jié)構(gòu)體的問(wèn)題,學(xué)了一堆亂七八糟的東西,加上之后都沒(méi)用,把能做的嘗試幾乎都試了一遍,一天過(guò)去了,最后還是TMD沒(méi)用。明明換成C++隨便調(diào)用,到了C#就難受起來(lái)了......
我甚至試著比較C#和C++的調(diào)用,在匯編層面有什么不同,結(jié)果依舊沒(méi)得到什么有價(jià)值的信息。
最后我放棄了,在StackOverflow用蹩腳的英文發(fā)了個(gè)帖,半個(gè)小時(shí)以后,我的世界觀崩塌了:

沒(méi)人正面解釋我的問(wèn)題,但是有個(gè)老哥問(wèn)我,為什么不直接用:Process.GetProcessById(someId).MainModule.BaseAddress
啊?嗯?哈?え?What the......還能直接這樣的嗎?搞了半天,我整了一整天沒(méi)解決的問(wèn)題,原來(lái)只要一行代碼?真就一行?我,我是誰(shuí),我在哪,我到底在干什么?
然后回頭又重新谷歌搜索了一遍同樣的問(wèn)題,發(fā)現(xiàn)只要我往下劃一下,下一個(gè)帖子里面就是用原生C#解決這個(gè)問(wèn)題的方法。但是我一般只看前幾個(gè)結(jié)果,所以忽略了。
冷靜下來(lái)以后想了想,這一頓折騰也并不是沒(méi)有價(jià)值。因?yàn)檫@個(gè)問(wèn)題我在未來(lái)一定會(huì)遇到,C#應(yīng)該不至于提供了全套的Winapi封裝,到時(shí)候我還是要調(diào)用一些函數(shù),然后要傳結(jié)構(gòu)體,然后搞不懂為什么我所有類型都對(duì)上了,還是TMD調(diào)用失敗......