如何将“aKernel32_dll_0:unicode 0,<kernel.32>,0”翻译成法律声明?</kernel.32>

时间:2014-02-17 16:46:01

标签: winapi assembly reverse-engineering ida kernel32

我使用IDA Pro在Windows 7 32位上反汇编SPEC 2006二进制文件。

它生成一个声明如下的变量:

aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0

在.text部分,我发现这个变量的用法如下:

push    offset aKernel32_dll_0
call    ds:__imp__GetModuleHandleW@4
......

我要做的是让这些代码/数据重新组合。

所以我的问题是:

  1. 所以基本上声明像** aKernel32_dll_0 unicode 0,0 **不能直接由masm / nasm重新组装,我该如何调整呢?

  2. 我只是将其调整为 aKernel32_dll_0 dd 0 ,代码如下:

  3. enter image description here

    每次调用ds:__ imp__GetModuleHandleW @ 4

    后,每次都会遇到奇怪的情况

    使用Ollydbg比较原始二进制文件:

    enter image description here

    所以似乎aKernel32_dll_0实际上是一个外部变量?正确的方法是删除声明和extern声明这个变量吗?如果是这样,那么这个变量的名称是什么?我不认为它是aKernel32_dll_0,因为它看起来像是由IDA Pro生成的随机名称。

    有人能给我一些帮助吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您当然可以将源材料中的任何字节复制为DB数组。 也就是说,我们知道GetModuleHandleW将unicode模块名称作为参数。在nasm语法中,它可能看起来像:

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