2015-07-20 7 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 делает точку входа «Возьмите» меня? А какие разделы близки к нему?

ответ

3

Если вы педантичны, информации недостаточно. Если мы предположим, что _start является точкой входа (что является типичным, но не обязательным), то при условии, что размер x составляет 4 байта, и нет ничего другого между x и _start, тогда адрес x, очевидно, _start - 4. Обратите внимание, что нет нормальной точки входа в разделе .data.

Для второго кода, у вас нет способа узнать, где находится .bss по отношению к .data или _start, если не рассматривать заголовки в двоичной системе.

+0

Можно ли считать, что все переменные в разделе .data будут «превышать» запись? так как он находится в том же разделе? – lolu

+1

Да, они не переупорядочиваются внутри раздела. – Jester

 Смежные вопросы

  • Нет связанных вопросов^_^