2009-11-12 1 views

ответ

1

x86 ABI поддерживает не-PIC-код в совместно используемых библиотеках. Как указывалось ранее, страницы, которые обычно будут разделяться, не будут разделяться (поскольку ld.so необходимо исправлять ссылки в коде, а особое место (GOT)).

Но библиотеки, построенные таким образом, могут быть немного быстрее, потому что код ПИК обычно медленнее.

amd64 ABI не поддерживает это.

2

PIC просто делает жизнь более простой для загрузчика, так как она только должна изменить несколько глобальных адресов в коде. В коде, отличном от PIC, содержится гораздо больше этих адресов, поэтому таблица с адресами, требующими перемещения, больше. Но загрузчик должен иметь возможность переместить код в любом случае (например, для разрешения адресов статических/глобальных переменных и всех указателей на функции).

+0

MUST ??? обычно это вообще не работает –

+0

У вас всегда есть некоторые символы, к которым обращаются через их глобальный адрес. Эти адреса всегда должны быть перемещены. Раньше такой код часто отображался на фиксированный адрес, но с появлением переполнения буфера ОС отображали приложение на постоянно меняющиеся адреса, чтобы сделать эти виды атак более сложными. –