我使用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
......
我要做的是让这些代码/数据重新组合。
所以我的问题是:
所以基本上声明像** aKernel32_dll_0 unicode 0,0 **不能直接由masm / nasm重新组装,我该如何调整呢?
我只是将其调整为 aKernel32_dll_0 dd 0 ,代码如下:
每次调用ds:__ imp__GetModuleHandleW @ 4
后,每次都会遇到奇怪的情况使用Ollydbg比较原始二进制文件:
所以似乎aKernel32_dll_0实际上是一个外部变量?正确的方法是删除声明和extern声明这个变量吗?如果是这样,那么这个变量的名称是什么?我不认为它是aKernel32_dll_0,因为它看起来像是由IDA Pro生成的随机名称。
有人能给我一些帮助吗?谢谢!
答案 0 :(得分:1)
您当然可以将源材料中的任何字节复制为DB
数组。
也就是说,我们知道GetModuleHandleW
将unicode模块名称作为参数。在nasm语法中,它可能看起来像:
aKernel32_dll_0 DW __utf16__('KERNEL32.DLL'), 0