История изменений
Исправление SZT, (текущая версия) :
SZT, возможно все моменты стоит обсудить отдельно, пишите на email danilvorotnikov@rambler.ru.
Все это можно обсудить и тут.
Можно рассмотреть на примере как выполняется какая-нибудь конкретная программа в виде файла на диске, скажем, это бинарник редактора vim - /usr/bin/vim. Мы даём команду в терминале /usr/bin/vim, что происходит дальше? Вот эти моменты и хорошо бы описать.
Лучше написать какую-нибудь совсем простенькую программу, и описывать ее работу. vim это слишком сложная программа для начала
Что происходит дальше после вызова каждой из функций: fork() и execve()?
Если fork() делается только чтобы запустить новый процесс из-под него, лучше делать vfork().
man 2 vfork:
vfork() is a special case of clone(2). It is used to create new processes without copying the page tables of the parent process. It may be useful in performance-sensitive applications where a child is created which then immediately issues an execve(2).
Это функции libc?
Ядро разбирает elf заголовок http://lxr.free-electrons.com/source/fs/binfmt_elf.c
Вот точка входа, указанная в elf заголовке:
readelf -h /bin/ls | grep Entry
Entry point address: 0x404890
https://www.opennet.ru/base/dev/objdump_elf.txt.html вот есть статья в опеннете, но там про 32-бит и довольно устаревшая информация.
Хорошо бы описать логику их работы, как они взаимодействуют с ядром.
Также хорошо было бы описать как работает стек, куча. Какие есть способы передачи параметров в функцию на уровне Ассемблера и какой вариант передачи параметров используется в скомпилированном, например, с помощью gcc, C-коде.
Полезно описать как стыковать вместе Ассемблер и C, inline Ассемблер и отдельно подключаемый файл на GAS.
Кроме этого, хорошо бы рассказать о безопасном коде на C - что такое переполнение буфера, как это может использоваться и как это можно предотвратить. Какие механизмы ядра есть для контроля процессов, например cgroups.
Да, это все надо будет описать, но начинать надо явно не с vim.
Исходная версия SZT, :
SZT, возможно все моменты стоит обсудить отдельно, пишите на email danilvorotnikov@rambler.ru.
Все это можно обсудить и тут.
Можно рассмотреть на примере как выполняется какая-нибудь конкретная программа в виде файла на диске, скажем, это бинарник редактора vim - /usr/bin/vim. Мы даём команду в терминале /usr/bin/vim, что происходит дальше? Вот эти моменты и хорошо бы описать.
Лучше написать какую-нибудь совсем простенькую программу, и описывать ее работу. vim это слишком сложная программа для начала
Что происходит дальше после вызова каждой из функций: fork() и execve()?
Если fork() делается только чтобы запустить новый процесс из-под него, лучше делать vfork().
man 2 vfork:
vfork() is a special case of clone(2). It is used to create new processes without copying the page tables of the parent process. It may be useful in performance-sensitive applications where a child is created which then immediately issues an execve(2).
Это функции libc?
Ядро разбирает elf заголовок http://lxr.free-electrons.com/source/fs/binfmt_elf.c Это точка входа, указанная в elf заголовке
readelf -h /bin/ls | grep Entry
Entry point address: 0x404890
https://www.opennet.ru/base/dev/objdump_elf.txt.html вот есть статья в опеннете, но там про 32-бит и довольно устаревшая информация.
Хорошо бы описать логику их работы, как они взаимодействуют с ядром.
Также хорошо было бы описать как работает стек, куча. Какие есть способы передачи параметров в функцию на уровне Ассемблера и какой вариант передачи параметров используется в скомпилированном, например, с помощью gcc, C-коде.
Полезно описать как стыковать вместе Ассемблер и C, inline Ассемблер и отдельно подключаемый файл на GAS.
Кроме этого, хорошо бы рассказать о безопасном коде на C - что такое переполнение буфера, как это может использоваться и как это можно предотвратить. Какие механизмы ядра есть для контроля процессов, например cgroups.
Да, это все надо будет описать, но начинать надо явно не с vim.