0

我使用 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,代码是这样的:

在此处输入图像描述

每次 调用 ds:__imp__GetModuleHandleW@4后都会遇到奇怪的情况

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

在此处输入图像描述

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

谁能给我一些帮助?谢谢!

4

1 回答 1

1

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

aKernel32_dll_0 DW __utf16__('KERNEL32.DLL'), 0
于 2014-02-17T17:41:35.537 回答