Я пытаюсь выяснить разницу между этими двумя разделами, может показаться, что это дубликат этого вопроса , но ответ, приведенный там, мало что объяснил, поэтому я бы как более подробное и краткое объяснение.
Разделение происходит из-за соображений безопасности. По умолчанию (в прошлом использовалось только значение -Wl,-z,relro) Раздел .got перераспределяется как доступный только для чтения, когда загрузчик динамического доступа c разрешает все перемещения данных при запуске (т. Е. Перед вводом функции main), чтобы предотвратить некоторые виды подвигов . .got.plt не может быть переназначен из-за привязки ленивых символов (если только не были использованы LD_BIND_NOW или -Wl,-z,now, в этом случае отключается привязка ленивых, а также переопределяется .got.plt).
-Wl,-z,relro
.got
main
.got.plt
LD_BIND_NOW
-Wl,-z,now