LINUX.ORG.RU

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

Исправление 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
Tочка входа выставляется обычно в процедуре _start из которой потом вызывается _init

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
Tочка входа выставляется обычно в процедуре _start из которой потом вызывается _init

https://www.opennet.ru/base/dev/objdump_elf.txt.html вот есть статья в опеннете, но там про 32-бит и довольно устаревшая информация.

Хорошо бы описать логику их работы, как они взаимодействуют с ядром.

Также хорошо было бы описать как работает стек, куча. Какие есть способы передачи параметров в функцию на уровне Ассемблера и какой вариант передачи параметров используется в скомпилированном, например, с помощью gcc, C-коде.

Полезно описать как стыковать вместе Ассемблер и C, inline Ассемблер и отдельно подключаемый файл на GAS.

Кроме этого, хорошо бы рассказать о безопасном коде на C - что такое переполнение буфера, как это может использоваться и как это можно предотвратить. Какие механизмы ядра есть для контроля процессов, например cgroups.

Да, это все надо будет описать, но начинать надо явно не с vim.