2015-07-20 72 views
0

我学习了一个测试,我有以下问题虚拟地址: 在ELF头据说该文件的入口点是在0x8049058ELF和用C

代码:

section .data 
    x: dd 3 

    _start: mov ecx, [x] 
    ... 
    ... 
    ... ;more code 

问:运行时x的虚拟地址是什么?

正确的答案是0x0849054

有人请澄清这一点? 如果x会跟在后面,它仍然会在同一个地址吗?

section .bss 
x: resb 4 

section .data 

_start: mov ecx, [x] 
... 
... 
... ;more code 

在哪里exacly做一个入口点“Take”me? 哪些部分靠近它?

回答

3

如果你是迂腐的,没有足够的信息来说明。如果我们假设_start是入口点(这是典型的,但不是强制性的),那么假定x的大小是4字节,并且在x_start之间没有别的,则x的地址显然是_start - 4。请注意,.data部分中的入口点不正常。

对于第二个代码,除非您检查二进制文件中的标题,否则无法确定.bss.data_start的关系。

+0

可以确定.data部分中的所有变量将严格地位于条目的“上方”?因为它在同一部分? – lolu

+1

是的,它们不在本节内重新排序。 – Jester