如果不在.reloc部分中,重定位数据存储在PE文件中的哪个位置?

时间:2016-08-17 08:29:51

标签: windows assembly x86 nasm portable-executable

我有以下程序:

    BITS 32

    section .data
_num1:  dd 5    

    section .text
    global _start
_start:
    push ebp
    mov ebp, esp

    mov eax, 9
    add eax, [_num2]
    sub eax, [_num1]

    leave
    ret

_num2:  dd 7

汇总到下面的x86指令中:

   0x00401000 <+0>:     push   ebp
   0x00401001 <+1>:     mov    ebp,esp
   0x00401003 <+3>:     mov    eax,0x9
   0x00401008 <+8>:     add    eax,DWORD PTR ds:0x401016
   0x0040100e <+14>:    sub    eax,DWORD PTR ds:0x402000
   0x00401014 <+20>:    leave
   0x00401015 <+21>:    ret

现在,subadd指令的地址似乎非常固定(绝对)。实际上,.data部分的VirtualAddress0x2000,但如果程序没有加载到其首选地址并且必须应用重定位,该怎么办?

在这种情况下,由于VirtualAddress是RVA,因此这些部分保持相对,但上述地址是固定的。

加载程序如何知道必须更改这些地址以指向正确的数据项?

0 个答案:

没有答案