2014-02-17 43 views
0

我使用IDA Pro在Windows 7 32位上反彙編SPEC 2006二進制文件。如何將「aKernel32_dll_0:unicode 0,<KERNEL.32>,0」翻譯成法律聲明?

它產生宣稱這樣的變量:

aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0 

在.text段,我覺得這樣這個變量的用法:

push offset aKernel32_dll_0 
call ds:[email protected] 
...... 

我所要做的就是讓這些代碼/數據重新組合。

所以我的問題是:

  1. 所以基本上聲明像** aKernel32_dll_0的unicode 0,0 **不能用MASM/NASM直接重組,應該怎麼調整呢?

  2. 我簡單地調整成aKernel32_dll_0 DD 0和代碼是這樣的:

enter image description here

,它會之後通話DS每次碰到一個奇怪的現象:__ imp__GetModuleHandleW @ 4

與使用Ollydbg的原始二進制相比較:

enter image description here

那麼看起來aKernel32_dll_0實際上是一個外部變量?那麼正確的方法刪除聲明和外部聲明這個變量?如果是這樣,那麼這個變量的名稱是什麼?我不認爲它是一個Kernel32_dll_0,因爲它看起來像是由IDA Pro生成的一個隨機名稱。

任何人都可以給我一些幫助嗎?謝謝!

回答

1

你當然可以將源文件中的任何字節複製爲DB數組。也就是說,我們知道GetModuleHandleW以一個unicode模塊名稱作爲參數。在nasm語法中,它可能看起來像:

aKernel32_dll_0 DW __utf16__('KERNEL32.DLL'), 0 
+0

嗨小丑,但什麼是正確的masm語法..? – computereasy

+0

'masm'似乎不支持utf16開箱即用,但有宏庫可以。對於這個簡單的ascii字符串,你可以手動插入0個字節,比如'aKernel32_dll_0 DB'K',0,'E',0 ...'你就可以實現這個想法。應以3個零結束(一個是最後一個wchar的高字節,另外兩個是終結符)。或者,您可以將其存儲爲ansi並切換函數調用以使用'GetModuleHandleA'。 – Jester

相關問題