скомпилированные адреса памяти программы c

Я пытаюсь понять следующее:

Дана небольшая программа Hello World на C

#include <stdio.h>

int main()
{
    int i;
    for(i=0; i < 10; i++)
    {
        printf("Hello, world!\n");
    }
}

Когда вы скомпилируете это с помощью gcc, а затем проверите полученный файл.out с помощью objdump, вы получите что-то вроде следующего:

08048374 <main>:
8048374:       55                      push   ebp
8048375:       89 e5                   mov    ebp,esp
8048377:       83 ec 08                sub    esp,0x8
804837a:       83 e4 f0                and    esp,0xfffffff0
804837d:       b8 00 00 00 00          mov    eax,0x0
8048382:       29 c4                   sub    esp,eax
8048384:       c7 45 fc 00 00 00 00    mov    DWORD PTR [ebp-4],0x0
804838b:       83 7d fc 09             cmp    DWORD PTR [ebp-4],0x9
804838f:       7e 02                   jle    8048393 <main+0x1f>
8048391:       eb 13                   jmp    80483a6 <main+0x32>
8048393:       c7 04 24 84 84 04 08    mov    DWORD PTR [esp],0x8048484
804839a:       e8 01 ff ff ff          call   80482a0 <printf@plt>
804839f:       8d 45 fc                lea    eax,[ebp-4]
80483a2:       ff 00                   inc    DWORD PTR [eax]
80483a4:       eb e5                   jmp    804838b <main+0x17>
80483a6:       c9                      leave  
80483a7:       c3                      ret    
80483a8:       90                      nop    
80483a9:       90                      nop    
80483aa:       90                      nop    

Первый столбец значений в результирующем.out файле - это адреса памяти, если я правильно понимаю, эти адреса содержат инструкции, которые следуют в других столбцах.

Теперь мой вопрос :Если вы скопируете файл на другой компьютер (или в другое место на том же компьютере, даже )и снова выгрузите файл, эти адреса должны измениться на что-то другое, потому что программа будет находиться в другом месте. место в памяти, правильно? Но если я это сделаю, я получу точно такой же вывод, те же значения адреса. Это почему? Я явно неправильно понимаю значение этого первого столбца,может кто-нибудь объяснить мне, что это за адреса? Заранее спасибо!

Обновление :Насколько я понимаю сейчас, благодаря ответу Пола Р. и некоторому дальнейшему чтению википедии, эти адреса ссылаются на виртуальное адресное пространство, в котором код выполняется операционной системой машины, на которой он работает. Эти виртуальные адреса сопоставляются с абсолютными адресами на реальной машине ее операционной системой.

5
задан Asciiom 9 August 2012 в 12:03
поделиться