Для меня работали следующие шаги:
PIC - это код, который динамически перемещается при загрузке. Код, который не является PIC, имеет адреса перехода и вызова, установленные во время связывания. У PIC есть таблица, которая ссылается на все места, где существуют такие значения, во многом как .dll.
Когда изображение загружается, загрузчик динамически обновляет эти значения. Другие схемы ссылаются на значение данных, которое определяет «базу», и целевой адрес определяется путем выполнения вычислений на основе. База обычно снова устанавливается загрузчиком.
Наконец, в других схемах используются различные трамплины, которые вызывают известные относительные смещения. Относительные смещения содержат код и / или данные, которые обновляются загрузчиком.
Существуют разные причины выбора разных схем. Некоторые из них работают быстро, но медленнее загружаются. Некоторые из них загружаются быстро, но имеют меньшую производительность.
EBX
указывает на глобальную таблицу смещения. См. эту ссылку о PIC на i386 . Ссылка объясняет, что такое PIC и как используется EBX
.