2014-02-17 4 views
0

Я использую IDA Pro для демонстрации исполняемых файлов SPEC 2006 в Windows 7 32 бит.Как перевести «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 юникода 0,, 0 ** не может быть непосредственно собраны с помощью MASM/NASM, как я должен настроить его?

  2. Я просто настроить его в aKernel32_dll_0 д.д. 0 и код выглядит так:

enter image description here

и она будет работать в странную ситуацию каждый раз после йза вызова: __ imp__GetModuleHandleW @ 4

По сравнению с исходным двоичным кодом с использованием Ollydbg:

enter image description here

Таким образом, кажется, что aKernel32_dll_0 на самом деле является ехЬегп переменной? Итак, правильный способ удалить декларацию, а extern объявить эту переменную? Если да, то каково имя этой переменной? Я не думаю, что это aKernel32_dll_0, поскольку это похоже на случайное имя, созданное IDA Pro.

Может ли кто-нибудь мне помочь? Спасибо!

ответ

1

Вы можете, конечно, просто скопировать все байты в исходном материале в виде массива DB. Тем не менее, мы знаем, что GetModuleHandleW принимает имя модуля юникода в качестве аргумента. В синтаксисе 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