在十六进制编辑器中,我找到了一个偏移量,我想在反汇编程序中查看该代码。在十六进制编辑器中,偏移量是EBE75,它看起来像这样:
显然是一个电话,我想在IDA / Olly中找到它并取一个看。但是,在这里我不确定如何将其转换为IDA / Olly可以理解的偏移量。是否添加图像库,或者添加.text节的偏移量?我设法使用IDA的hexscan找到了代码,它位于地址
004ECA75
中:这真让我感到惊讶,这个数字是从哪里来的?这与.exe的布局有何关系?#1 楼
要将PE文件中的原始偏移量转换为其对应的“反汇编程序偏移量”(称为虚拟地址或VA),您需要执行以下步骤:步骤1
使用PE编辑器,查看PE文件的节表以找到包含文件偏移量的节。
例如,假设您的PE文件的节表如下所示:
+-----------------------------------------------------------------+
| Name | Virtual Address | Virtual Size | Raw Offset | Raw Size |
|--------+-----------------+--------------+------------+----------|
| .text | 00001000 | 00152CA1 | 00000400 | 00152E00 |
| .data | 00154000 | 000040C0 | 00153200 | 00004200 |
| .rsrc | 00159000 | 00062798 | 00157400 | 00062800 |
| .reloc | 001BC000 | 00003B3C | 001B9C00 | 00003C00 |
+-----------------------------------------------------------------+
您可以在上方看到包含
EBE75
的原始偏移量是.text
的部分。 PE编辑器,查找PE文件的图像库。例如,假设文件的图像库为00000400 <= EBE75 < 00153200
。步骤3
执行以下计算:
(target raw offset) - (raw offset of section) + (virtual address of section) + (image base)
= (target virtual address)
在上面的示例值中,我们发现原始偏移量
00400000
的虚拟地址为:EBE75 - 00000400 + 00001000 + 00400000
= 4ECA75
评论
很好的解释,现在已经很清楚了,谢谢:)
–user4520
2015年1月19日15:29
00000400 <= EBE75 <00053200 umm,不。。。但是,其余答案很好。
–FRob
15年1月22日在11:41
@FRob糟糕,是的,很好。虽然没有太大变化。
–user4520
15年1月22日在12:56
感谢抓到,@ FRob!我已经修复了上面的示例节表。
–詹森·格夫纳(Jason Geffner)
15年1月22日在14:29
#2 楼
ollydbg 1.10如果您具有
ollydbg中加载的二进制文件,则Disasm窗口位于正确的模块中
二进制文件也在hexeditor中打开
右键单击->视图->可执行文件
在新窗口中执行
ctrl+g
并输入您在hexeditor ebe75
中看到的偏移量right click in new window -> follow in disassembler
在hexeditor 0x1529中具有0xe8操作码
xxd -s 0x1520 -l 0x10 -g 1 c:\WINDOWS\system32\calc.exe
0001520: ff d6 6a 01 a3 4c 4d 01 01 e8 e9 f8 ff ff 6a 69 ..j..LM.......ji
在ollydbg中单击鼠标右键->视图->可执行文件和ctrl + g 1520在新窗口中
00001520 FFD6 CALL NEAR ESI
00001522 6A 01 PUSH 1
00001524 A3 4C4D0101 MOV DWORD PTR DS:[1014D4C], EAX
00001529 E8 E9F8FFFF CALL 00000E17
0000152E 6A 69 PUSH 69
在新窗口中->在反汇编器中查看图像
01002120 |. FFD6 CALL NEAR ESI ; \GetProfileIntW
01002122 |. 6A 01 PUSH 1 ; /Arg1 = 00000001
01002124 |. A3 4C4D0101 MOV DWORD PTR DS:[gbUseSep], EAX ; |
01002129 |. E8 E9F8FFFF CALL InitSciCalc ; \InitSciCalc
0100212E |. 6A 69 PUSH 69 ; /TableName = 69
评论
您的“原始偏移量”也称为“文件偏移量”;这可能会帮助您找到相关的命令。