2013-04-15 67 views
0

我有結構的地址使用(我認爲這是很好的一個)0040336C 我試圖用它在我注入一些程序的DLL(其中的地址是)結構地址在DLL

這真的是實驗性的,因爲我試圖獲得lua_State地址。

data:0040336C [email protected]@[email protected]@A dd ?    ; DATA XREF: _main+Cw 

lua_State* L = (lua_State*)0x0040336C; 

我試過這種方式,但程序崩潰後,我注入它。

(說什麼調試器)在 midaslua.exe在0x003a19e8

未處理的異常:0000005:訪問衝突讀取位置 0x443de713。

+3

我很想知道*爲什麼*你想這樣做。你能解釋更多背景嗎? –

+0

就像我說的那是實驗。我正試圖將LUA模塊直接編譯爲exe。有了這第二個任務,我沒有問題。我可以使用require,但這不是我想要的。 – deepspace

+0

好吧,所以你想注入一些可以運行腳本的exe文件?嗯... –

回答

0

你所引用的第一個地址是結構一個DLL的數據段內的地址,但你正在嘗試取消引用地址是在進程的內存地址。這兩個地址是而不是,所以不可能像你一樣使用它們。

實際上,您試圖解引用一段內存,其中應用程序可能會或可能不會存儲某些數據,並將這段內存視爲lua_State(其中大部分情況並非如此)。這導致了未定義的行爲,最終導致AV。

在內存中找到一個地方很難(甚至不可能),這個變量存儲在進程的內存中。建議另一種方法。

+0

I正如我上面提到的那樣,將這個DLL注入到這個進程中。 它適用於如果我使用例如*(INT *)0x4206620。在使用IDA時找到位置並不難。 – deepspace

+0

我想,你想寫(int \ *)0x4206620。它可能工作也可能不工作,具體取決於應用程序是否擁有這個內存位置。如果是這樣,你將檢索存儲在那個地方的四個連續字節(大多數可能不是一個lua_State)。這是兩種不同類型的地址,它不會以這種方式工作。 – Spook

+0

@ user1857483:如果那個「有效」,你必須使用WinXP或其他東西。在一個體面的操作系統上,像任何半新操作系統一樣,每次運行可執行文件時,該地址都會有所不同。 –