2015-07-20 30 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