这是一个非常愚蠢的问题,但是令人惊讶的是我今天遇到了这个问题。
在十六进制编辑器中,我找到了一个偏移量,我想在反汇编程序中查看该代码。在十六进制编辑器中,偏移量是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