Winapi 如何翻译;aKernel32_dll_0:unicode 0,<;内核.32>;,0“;变成法律声明?

Winapi 如何翻译;aKernel32_dll_0:unicode 0,<;内核.32>;,0“;变成法律声明?,winapi,assembly,reverse-engineering,ida,kernel32,Winapi,Assembly,Reverse Engineering,Ida,Kernel32,我使用IDA Pro在Windows 7 32位上反汇编SPEC 2006二进制文件 它生成一个声明如下的变量: aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0 push offset aKernel32_dll_0 call ds:__imp__GetModuleHandleW@4 ...... 我试图做的是使这些代码/数据重新组合 因此,我的问题是: 所以基本上像**aKernel32\u dll\u 0 unicode 0

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

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

aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0
push    offset aKernel32_dll_0
call    ds:__imp__GetModuleHandleW@4
......
我试图做的是使这些代码/数据重新组合

因此,我的问题是:

  • 所以基本上像**aKernel32\u dll\u 0 unicode 0,0**这样的声明不能由masm/nasm直接重新组装,我应该如何调整它

  • 我只需将其调整为aKernel32\u dll\u 0 dd 0,代码如下:

  • aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0
    
    push    offset aKernel32_dll_0
    call    ds:__imp__GetModuleHandleW@4
    ......
    

    每次呼叫ds:\u imp之后,它都会遇到一种奇怪的情况__GetModuleHandleW@4

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

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


    谁能给我一些帮助吗?谢谢大家!

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

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

    masm
    似乎不支持utf16开箱即用,但也有一些宏库支持utf16。但是,对于这个简单的ascii字符串,您可以手动插入0个字节,如
    aKernel32\u dll\u 0 DB'K',0'E',0…
    您就知道了。应该以3个零结尾(一个是最后一个wchar的高位字节,另外两个是终止符)。或者,您可以将其存储为ansi并将函数调用切换为使用
    GetModuleHandleA