回答
是的。只要你的模塊掛鉤進程,你就可以共享相同的地址空間。這意味着進程已分配的內存(例如,類實例)將會被您訪問。
如果你知道類實例的偏移量,那麼你可以:
- 施放此內存地址的指針類(只要你有包括類的頭)從
- 使用補償這個內存地址訪問類的成員。
請參閱MSDN上的Traversing the Module List。一旦你想要「掛鉤」的過程的MODULEENTRY32,您可以使用modBaseAddr
作爲您的偏移的基礎。例如,如果你知道它指向是0x000AD421一個類的實例一個全局變量,你可以這樣做:
ClassName *pClassBase = moduleEntry->modBaseAddr + 0x000AD421;
pClassBase->UseSomeFunctions();
或
unsigned char *pClassBase = moduleEntry->modBaseAddr + 0x000AD421; // if we don't know the exact definition of the class we want to play with
float flMemberValue = *reinterpret_cast<float*>((unsigned char *)pClassBase + 24); // float member value at offset 24
// value of member is flMemberValue
*reinterpret_cast<float*>((unsigned char *)pClassBase + 24) = 15.25; // setting the same member value to 15.25.
正如其他評論者指出,尋找類的偏移基地是這一過程中最難的部分。但是,如果您有方便的類定義,這實際上是您必須完成的唯一工作(即,您也不必查找類成員偏移量)。
主要問題是找到東西的地址。一個非調試版本將會刪除大部分元數據,這使得找到任何不是全局的東西(甚至在一些情況下甚至是一堆東西)變得相當複雜。 – cHao
非常如此。檢查等效的Linux二進制文件(編譯後的程序集與我的經驗類似)通常更容易,然後在運行時使用簽名掃描來查找偏移量。問題提問者已經知道如何與流程掛鉤的事實讓我相信他已經有了抵消。如果不是,那麼這是一個完全不同的問題。 – Saul
@SaulRennison你的意思是如果一個宿主進程加載一個DLL,你的意思是這個DLL可以在宿主進程中訪問一個類成員變量?另外,如果我有exe文件,我可以檢查它並在運行時進行簽名掃描,也就是當DLL實際加載時?此外,你的意思是dll可以簽名掃描它的主機進程? – xybrek
- 1. 閱讀SSIS變量
- 2. 閱讀Json變量
- 3. 閱讀類變量
- 4. 閱讀JS變量
- 5. 閱讀$ _ POST變量
- 6. 的Python:閱讀的變量
- 7. 閱讀rails env變量rspec
- 8. 閱讀變量內容
- 9. 閱讀蟒蛇變量
- 10. 閱讀JSON數據變量
- 11. 閱讀與jQuery的外部PHP變量
- 12. 閱讀HTML文件的JavaScript變量(Windows)
- 13. 閱讀TCL中的Bash環境變量
- 14. 閱讀Oracle 10gas上的環境變量
- 15. 閱讀shell中變量的每一列
- 16. 閱讀環境Jmeter中的變量值
- 17. while循環變量的閱讀問題
- 18. 閱讀私有變量的類成員
- 19. 如何閱讀Awesomium的Javascript變量? C++
- 20. 閱讀一個文本文件w/WIN32
- 21. 發佈閱讀變量並通過
- 22. 閱讀變量從SEO友好URLS
- 23. 閱讀環境變量是慢操作?
- 24. 閱讀字符串變量RUBY
- 25. 在Python中閱讀Javascript變量
- 26. Laravel沒有閱讀env變量
- 27. JQuery閱讀JSON(全局/本地變量)
- 28. 在PHP中閱讀JavaScript變量
- 29. Python和閱讀JavaScript變量值
- 30. 全局變量和閱讀器monad
如果您可以找到存儲變量的位置並擁有正確的權限,請繼續:[ReadProcessMemory](http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v = vs.85)的.aspx)。這並不是說這是你在大多數情況下特別想做的事情。 – chris
-1,你能澄清你在這裏問什麼嗎?我根本不懂。 –
@MichaelKristofik他想編寫一個程序來附加到已經運行的程序,以讀取類內變量的內容。他有這個正在運行的程序的源代碼。基本上他想實現一個調試器的基本組件(變量監視/檢查)。 –