Это зависит от ОС.
В OS X в заголовке mach есть рамка, содержащая начальный адрес для регистра EIP (указатель инструкции).
После загрузки двоичного файла ОС запускает выполнение с этого адреса:
cristi:test diciu$ otool -l ./a.out | grep -A 10 LC_UNIXTHREAD
cmd LC_UNIXTHREAD
cmdsize 80
flavor i386_THREAD_STATE
count i386_THREAD_STATE_COUNT
[..]
ss 0x00000000 eflags 0x00000000 eip 0x00001f8c cs 0x00000000
[..]
Адрес - это адрес функции запуска из двоичного файла:
cristi:test diciu$ nm ./a.out
0000200c D _NXArgc
00002008 D _NXArgv
00002000 D ___progname
00001fe0 t __dyld_func_lookup
00001000 A __mh_execute_header
[..]
00001f8c T start
В Mac OS X сначала вызывается функция «start», даже до «main»:
(gdb) b start
Breakpoint 1 at 0x1f90
(gdb) b main
Breakpoint 2 at 0x1ff4
(gdb) r
Starting program: /Users/diciu/Programming/test/a.out
Reading symbols for shared libraries ++. done
Breakpoint 1, 0x00001f90 in start ()