Я недавно поставил точку останова, где начальный адрес был:У точки останова есть два адреса?
(gdb) b viewscreen_movieplayerst::create(char, viewscreenst*)
Breakpoint 1 at 0x804beec
и второй (обычный адрес) был:
(gdb) run
Breakpoint 1, 0xf7b46630
in viewscreen_movieplayerst::create(char,viewscreenst*)()
from/path/libs/libgraphics.so
Является ли это потому, что исполняемый файл удаляется? Или выполняется исполняемый исполняемый файл и после его изменения адрес изменяется?
Кроме того, основным является:
(gdb) b main
Breakpoint 1 at 0x804bdec
Что выглядит довольно близко к адресу, так что я буду включать его.
Edit:
What does the concept of relocation mean?
So most of the binary is composed of reloc table?
Ваш вопрос не совсем ясен для меня. Если адрес отличается при запуске (вы можете проверить с помощью 'info break'), то да, это, вероятно, переключение времени выполнения. Если на самом деле есть два адреса, это может произойти из-за различных оптимизаций компилятора. –
@Tom Tromey В какой ситуации у него будет 2 адреса? Если нет, вы дали мне фразу «runtime relocation», которую я искал – Jim
Предположительно, функция может иметь несколько адресов из-за разрешения вставки и перегрузки. – kfsone