При динамической линковке код не "сваливается" в один сегмент, как это обычно происходит при статической линковке, в динамической библиотеке есть сегмент кода, у каждой библиотеки он свой. Каждая динамическая библиотека отображается в определенную область адресного пространства процесса, необязательно последовательную. Те страницы адресного пространства, куда отображается кодовый сегмент библиотеки помечаются как исполняемые. Функция получает управление в момент вызова, адрес по которому функция расположена определяется вызывающей функцией либо через таблицу импорта, которая заполняется в процессе динамической линковки, либо через непосредственный вызов GetProcAddr.