amarao (amarao_san) wrote,
amarao
amarao_san

как же так (ответы)

Большое спасибо @greycat_na_kor за ссылку на https://www.akkadia.org/drepper/dsohowto.pdf



1. Статические бинари:
The handling of a statically linked application is very simple. Such an application has a fixed load address which the kernel knows. The load process consists simply of making the binary available in the appropriate address space of a newly created process and transferring control to the entry point of the application. Everything else was done by the static linker when creating the executable.

(насколько я понимаю, это не касается position independent executable (PIE). Т.е. для такого бинаря вполне можно представить себе выкидывание страниц из памяти on demand и загрузку их из того самого бинаря. (контрольная проверка: можно ли отмонтировать файловую систему с которой что-то запущено? Проверяю: нельзя: umount: /tmp/1: target is busy, для: /tmp/1/test: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked).

2. The task of the dynamic linker is it, to complete the dynamically linked application by loading the DSOs it needs (the dependencies) and to perform the relocations.
3. This is not the last task for the dynamic linker in most cases, though. ELF allows the relocations associated with a symbol to be delayed until the symbol is needed.

3. To this value the dynamic linker only has to add the load address of the object and
store the result in the place indicated by the relocation.

(fun fact: the total is 1,718,064 string comparisons - для загрузки OpenOffice 1.0, на этапе динамической линковки).

Основные выводы: разные бинарники имеют разное поведение (зависящее от флагов). В общем случае нельзя утверждать, что исполняемый файл может быть выкинут из памяти вместо swap out, хотя есть случаи, когда это возможно.
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments