我正在對一個程序進行逆向工程。我正在使用IDA Pro和Hex-Rays Decompiler。我碰到大量的代碼,我知道有一個對象,並有一個方法調用對象,但它顯示的方式,我無法弄清楚。例如:找出對象的內存佈局而不調試正在運行的程序?
if ((*(*interfacePtr + 24))(interfacePtr, &v23) >= 0)
我知道這裏interfacePtr指向一個ICLRRuntimeHost對象。 (C++,.NET CLR運行時)但是....我不知道什麼是*(* interfacePtr + 24)。我可以告訴它是一種方法,但我怎麼知道坐在+24的是什麼?
難道你不認爲在逆向工程論壇上有更好的答案嗎?或者也許是IDA/hex-rays論壇,你應該在爲這個軟件付出巨大的價錢之後獲得這個論壇? – snemarch 2012-08-12 03:03:49
IDA可以解析用於結構聲明的C頭文件。 'ICLRRuntimeHost'在Windows SDK'mscoree.h'文件的定義,有些工作,你應該能夠養活任何該文件到IDA或者至少提取類和虛函數表聲明到另一個文件和解析。在IDA定義了這個類之後,你可以簡單地告訴Hex-Rays:'interfacePtr'是'ICLRRuntimeHost'類型(按Y或者右鍵單擊變量名),它將更新顯示以包含函數名。 – DCoder 2012-08-12 05:38:06
@snemarch我認爲這個問題是完全有效的,因爲所有的關於編程都是關於編程的,在一天結束的時候....是我的問題真正的關鍵。如果我遇到產品問題,我會使用討論板上的產品。但是,這僅僅是我對本機Windows可執行文件的底層機制知之甚少......而不是我在IDA或Hex-Rays反編譯器方面遇到問題。 – 2012-08-12 16:07:59