Winapi PE 101 windows api调用地址说明
我正试图建立一个程序,将提供更多的信息,文件和可能的反汇编程序。我看了几本书以获得更多的信息,读了几遍后,我了解了其中的大部分内容。我不明白的是windows api的调用地址。例如,他如何知道指令调用[0x402070]是对messagebox的api调用?我知道如何计算字符串的地址,2个push命令对字符串有意义,但不知道dll部分 我想我想说的是我不明白“导入结构”的部分 (我画了一个黄色方框的部分)如果有人能向我解释0x402068如何指向exitProcess,0x402070如何指向MessageBoxA,这对我真的很有帮助。谢谢 加载程序(Windows操作系统的一部分)“修补”导入地址表(IAT),然后再启动示例程序,此时库过程的实际地址显示在内存位置0x402068和0x402068中。请注意,导入位于simple.asm中的nobit部分:Winapi PE 101 windows api调用地址说明,winapi,assembly,hex,call,disassembly,Winapi,Assembly,Hex,Call,Disassembly,我正试图建立一个程序,将提供更多的信息,文件和可能的反汇编程序。我看了几本书以获得更多的信息,读了几遍后,我了解了其中的大部分内容。我不明白的是windows api的调用地址。例如,他如何知道指令调用[0x402070]是对messagebox的api调用?我知道如何计算字符串的地址,2个push命令对字符串有意义,但不知道dll部分 我想我想说的是我不明白“导入结构”的部分 (我画了一个黄色方框的部分)如果有人能向我解释0x402068如何指向exitProcess,0x402070如何指向
section nobits vstart=IMAGEBASE + 2 * SECTIONALIGN align=FILEALIGN
加载后导入的节从虚拟地址开始(IMAGEBASE=400000h)+2*(SECTIONALIGN=1000h)=0x402000
该示例的yasm源代码非常不寻常,该图表也不是学习PE格式的最佳场所。请先读(一篇短文)。它有到的链接,所以我在这里只做一些简短的说明
您可能还希望使用来检查样本。启动simple.exe,然后使用作弊引擎连接到进程,按Memory View,然后按menuTools->解析PE标题,然后按按钮信息,查看选项卡导入。在内存转储中,转到地址00402000(CTRL+G 00402000输入:
00402068:E4 39 BE 750069 5F 47 7700 00 00 6B 65 72 6E 65 6C 33 32 2E
注意这些位置的值
- 00402068:0x75BE39E4(在我的计算机上)=内核32.ExitProcess的地址
- 00402070:0x77475F69(仅在我的示例中)=user32.MessageBoxA的地址
- 0000000 468:0x0000204C-dw 0的相对虚拟地址;db'ExitProcess',0
- 0000000 470:0x0000205A-dw 0的相对虚拟地址;db'MessageBoxA',0
你下载了PE101.zip并检查了源代码吗?它们很不寻常。IAT包含DLL的名称和导入的函数。调用DLL函数时,应用程序的代码对加载程序存储在IAT插槽中的该函数的内存地址执行
调用
。因此,当你的反汇编程序看到CAL时L
对于从IAT中检索的内存地址,它可以从IAT中检索DLL+函数名以用于显示目的,而不是显示内存地址。
0000000450: 69 74 50 72 6F 63 65 73 │ 73 00 00 00 4D 65 73 73 itProcess Mess
0000000460: 61 67 65 42 6F 78 41 00 │ 4C_20_00_00 00 00 00 00 ageBoxA L
0000000470: 5A_20_00_00 00 00 00 00 │ 6B 65 72 6E 65 6C 33 32 Z kernel32
0000000480: 2E 64 6C 6C 00 75 73 65 │ 72 33 32 2E 64 6C 6C 00 .dll user32.dll