У меня есть очень простая программа, которую я скомпилировал с
gcc -m32 -g -o hello32.out hello.c
Когда я запускаю дизассемблирование main в gdb, я получаю следующий вывод:
0x0000051d <+0>: lea ecx,[esp+0x4]
0x00000521 <+4>: and esp,0xfffffff0
0x00000524 <+7>: push DWORD PTR [ecx-0x4]
0x00000527 <+10>: push ebp
0x00000528 <+11>: mov ebp,esp
0x0000052a <+13>: push ebx
0x0000052b <+14>: push ecx
0x0000052c <+15>: sub esp,0x10
0x0000052f <+18>: call 0x420 <__x86.get_pc_thunk.bx>
0x00000534 <+23>: add ebx,0x1aa4
0x0000053a <+29>: mov DWORD PTR [ebp-0xc],0x0
... [truncated for brevity]
Однако, когда я запускаю
(gdb) break main
(gdb) run
(gdb) info register eip
Я получаю
eip 0x5655553a 0x5655553a <main+29>
Почему main + 29 отображается как 0x0000053a в дампе ассемблера, а 0x5655553a, когда указан адрес eip?