Почему gcc помещает инструкцию «остановить» в программы после вызова «main»?

При просмотре исполняемого файла elf, созданного gcc на В системе Linux / i386 кажется, что она всегда помещает инструкцию остановки (0xf4) после вызова «main» и перед заполнением «nop», например:

│ ....... ! entrypoint:
│ ....... !   xor         ebp, ebp
│ 80482e2 !   pop         esi
│ 80482e3 !   mov         ecx, esp*emphasized text*
│ 80482e5 !   and         esp, 0fffffff0h
│ 80482e8 !   push        eax
│ 80482e9 !   push        esp
│ 80482ea !   push        edx
│ 80482eb !   push        __libc_csu_fini
│ 80482f0 !   push        __libc_csu_init
│ 80482f5 !   push        ecx
│ 80482f6 !   push        esi
│ 80482f7 !   push        main
│ 80482fc !   call        wrapper_804a004_80482c4
│ 8048301 !   hlt                                      <--- halt instruction
│ 8048302 !   nop
│ 8048303 !   nop
│ 8048304 !   nop
               ⋮

Какова цель этого? Этот код никогда не должен быть доступен. Это какая-то мера защиты?

9
задан beta 6 March 2011 в 21:57
поделиться