Я знаю, что современные ОС, такие как Linux, не всегда выполняют приложение по тому же адресу, с которого он был первоначально связан. Когда отладчик начинает искать вокруг, он должен знать взаимосвязь между исходным адресом ссылки и конечным исполняемым адресом. Как GDB вычисляет смещение?Как GDB знает, где был переустановлен исполняемый файл?
Пояснения: Я не говорю о виртуальной памяти. То есть у меня (как я считаю) разумное понимание того, как работает виртуальная память, и я полностью работаю в этом адресном пространстве. У меня есть символы, которые находятся в одном месте, когда я сбрасываю таблицу символов из ELF, но в другом месте, когда я получаю их адрес из памяти.
В этом конкретном случае у меня есть строка, которая в связанном исполняемом файле находится по адресу 0x0E984141. В дампе памяти из этого процесса он находится по адресу 0x0E3F2781. Все в разделе .rodata, по крайней мере, сдвинуто на 0x5919C0. Это похоже на рандомизацию компоновки адресного пространства.