Winapi 如何翻译;aKernel32_dll_0:unicode 0,<;内核.32>;,0“;变成法律声明?
我使用IDA Pro在Windows 7 32位上反汇编SPEC 2006二进制文件 它生成一个声明如下的变量: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
aKernel32_dll_0 unicode 0, <KERNEL32.DLL>,0
push offset aKernel32_dll_0
call ds:__imp__GetModuleHandleW@4
......
我试图做的是使这些代码/数据重新组合
因此,我的问题是:
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
。