LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Что такое page tables?

Пользовательский процесс работает в защищенном режиме(с MMU) и он обычно имеет дело не с реальными физическими адресами, а с виртуальными, куски памяти отображаются в виртуальной адресное пространство процесса. Page table связывает адреса виртуальные(доступные процессу) с адресами физическими...
Короче, это долго объяснять. Вот релевантные ссылки, где на мой взгляд достаточно поднятно это описано

https://habrahabr.ru/company/embox/blog/256191/
https://habrahabr.ru/post/211150/
https://en.wikipedia.org/wiki/Page_table
https://en.wikipedia.org/wiki/Virtual_address
http://www.intuit.ru/studies/courses/2192/31/lecture/984
Есть еще механизм подкачки страниц https://en.wikipedia.org/wiki/Paging

Ещё хорошо бы было описать, как отрабатывает команда процессора syscall, что делает ядро, что делает процессор и т.д.

Это надо закапываться в интел мануалы. Не думаю что стоит особо заострять внимание на кривой и костыльной интел архитектуре. Ну понятно что там переход с RING 0 в RING 3 при SYSENTER. Вот например статья про это http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/
И еще http://prodebug.sourceforge.net/pmtut.html
Правда там 32-битное описывают, а не 64-битное.

Один момент хотел бы предложить. Чтобы понять соответствие между кодом C и Ассемблером, полезно рассмотреть команду mov и оператор присваивания.

Конечно все рассмотрим

Как получить список функций в .so или др. файле?

readelf покажет. Например readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | grep puts
https://stackoverflow.com/questions/34732/how-do-i-list-the-symbols-in-a-so-file
https://www.cs.swarthmore.edu/~newhall/unixhelp/compilecycle.html вот еще полезная ссылка

Каков формат .o-файла?

ELF файл это. Если конкретней - ELF 64-bit LSB relocatable. .so файлы это тоже ELF.

Да, кстати. Вот тут происходит загрузка ELF файла. http://lxr.free-electrons.com/source/fs/binfmt_elf.c#L667
Можно попробовать отследить весь путь, начиная от вызова execve() только тут уже надо в ядро отладчиком тыкать.

Исходная версия SZT, :

Что такое page tables?

Пользовательский процесс работает в защищенном режиме(с MMU) и он обычно имеет дело не с реальными физическими адресами, а с виртуальными, куски памяти отображаются в виртуальной адресное пространство процесса. Page table связывает адреса виртуальные(доступные процессу) с адресами физическими...
Короче, это долго объяснять. Вот релевантные ссылки, где на мой взгляд достаточно поднятно это описано

https://habrahabr.ru/company/embox/blog/256191/
https://habrahabr.ru/post/211150/
https://en.wikipedia.org/wiki/Page_table
http://www.intuit.ru/studies/courses/2192/31/lecture/984
https://en.wikipedia.org/wiki/Virtual_address
Есть еще механизм подкачки страниц https://en.wikipedia.org/wiki/Paging

Ещё хорошо бы было описать, как отрабатывает команда процессора syscall, что делает ядро, что делает процессор и т.д.

Это надо закапываться в интел мануалы. Не думаю что стоит особо заострять внимание на кривой и костыльной интел архитектуре. Ну понятно что там переход с RING 0 в RING 3 при SYSENTER. Вот например статья про это http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/
И еще http://prodebug.sourceforge.net/pmtut.html
Правда там 32-битное описывают, а не 64-битное.

Один момент хотел бы предложить. Чтобы понять соответствие между кодом C и Ассемблером, полезно рассмотреть команду mov и оператор присваивания.

Конечно все рассмотрим

Как получить список функций в .so или др. файле?

readelf покажет. Например readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | grep puts
https://stackoverflow.com/questions/34732/how-do-i-list-the-symbols-in-a-so-file
https://www.cs.swarthmore.edu/~newhall/unixhelp/compilecycle.html вот еще полезная ссылка

Каков формат .o-файла?

ELF файл это. Если конкретней - ELF 64-bit LSB relocatable. .so файлы это тоже ELF.

Да, кстати. Вот тут происходит загрузка ELF файла. http://lxr.free-electrons.com/source/fs/binfmt_elf.c#L667
Можно попробовать отследить весь путь, начиная от вызова execve() только тут уже надо в ядро отладчиком тыкать.