Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 47

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²Π°, Ρ‡Ρ‚ΠΎ ΠΈ shell. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ сСансС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС ΠΏΡ€Π°Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ всСх процСссов являСтся login shell, Ρ‚ΠΎ ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹.

Казалось Π±Ρ‹, эту ΡΡ‚Ρ€ΠΎΠΉΠ½ΡƒΡŽ систСму ΠΌΠΎΠ³ΡƒΡ‚ "ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ" ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ с установлСнными Ρ„Π»Π°Π³Π°ΠΌΠΈ SUID ΠΈ SGID. Но Π½Π΅ стоит Π²ΠΎΠ»Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ β€” ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, эти ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ!

На рис. 2.10. ΠΏΠΎΠΊΠ°Π·Π°Π½ процСсс наслСдования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСанса Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_22.jpeg

Рис. 2.10. НаслСдованиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²

Для получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² процСсса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹:

#include <sys/types.h>

#include <unistd.h>

uid_t getuid(void);

uid_t geteuid(void);

gid_t getgid(void);

gid_t getegid(void);

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ для сдСлавшСго Π²Ρ‹Π·ΠΎΠ² процСсса соотвСтствСнно Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ эффСктивный ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ эффСктивный ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π³Ρ€ΡƒΠΏΠΏΡ‹.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния этих ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²:

#include <sys/types.h>

#include <unistd.h>

int setuid(uid_t uid);

int setegid(gid_t egid);

int seteuid(uid_t euid);

int setgid(gid_t gid);

БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ setuid(2) ΠΈ setgid(2) ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ сразу Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ эффСктивный ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π° систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ seteuid(2) ΠΈ setegid(2) β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эффСктивныС.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ login(1), ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСсса Π½Π° значСния, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· записи Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ имССтся ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с записями Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описываСтся структурой

passwd
, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ <pwd.h>. Поля этой структуры ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 2.17.

Π’Π°Π±Π»ΠΈΡ†Π° 2.17. Поля структуры passwd

ПолС Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
char *pw_name
Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
char *pw_passwd
Π‘Ρ‚Ρ€ΠΎΠΊΠ°, содСрТащая ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅; ΠΈΠ· сообраТСния бСзопасности Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ систСм ΠΏΠ°Ρ€ΠΎΠ»ΡŒ хранится Π² Ρ„Π°ΠΉΠ»Π΅ /etc/shadow, Π° это ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ
uid_t pw_uid
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
gid_t pw_gid
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹
char *pw_gecos
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (ΠΏΠΎΠ»Π΅ GECOS), ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация
char *pw_dir
Π”ΠΎΠΌΠ°ΡˆΠ½ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
char *pw_shell
ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

Ѐункция, которая потрСбуСтся для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ запись Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Она ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

#include &lt;pwd.h&gt;

struct passwd *getpwnam(const char *name);

Π˜Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

...

struct passwd *pw;

char logname[MAXNAME];

/* Массив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ запускС

Β Β  ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° */

char *arg[MAXARG];

/* ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° */

char *envir[MAXENV];

...

/* ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ поиск записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΈΠΌΠ΅Π½Π΅ΠΌ logname,

Β Β  ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ &quot;login:&quot; */

pw = getpwnam(logname);

/* Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ

Β Β  ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ */

if (pw == 0)

Β retry();

Β /* Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС установим ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСсса

Β  Β  Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ значСниям, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΈ запустим

Β Β  Β ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ */

else {

Β setuid(pw-&gt;pw_uid);

Β setgid(pw-&gt;pw_gid);

Β execve(pw-&gt;pw_shell, arg, envir);

}

...

Π’Ρ‹Π·ΠΎΠ² execve(2) запускаСт Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅. ΠœΡ‹ рассмотрим эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами" Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

ΠŸΡ€ΠΈ обсуТдСнии Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² памяти ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ сСгмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свои Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Если для стСка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ выдСлСния памяти опСрационная систСма ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ автоматичСски, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ростом сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…, выдСляя Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· Ρ…ΠΈΠΏΠ° (heap β€” ΠΊΡƒΡ‡Π°). Рассмотрим этот ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс.

ΠŸΠ°ΠΌΡΡ‚ΡŒ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСгмСнтами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° нСсколькими Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами ΠΊΠ°ΠΊ Π²ΠΎ врСмя создания процСсса, Ρ‚Π°ΠΊ ΠΈ динамичСски Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния. БущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ способа выдСлСния памяти:

1.Β ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ объявлСна ΠΊΠ°ΠΊ глобальная, ΠΈ Π΅ΠΉ присвоСно Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

char ptype = &quot;Unknown file type&quot;;

Π‘Ρ‚Ρ€ΠΎΠΊΠ°

ptype
размСщаСтся Π² сСгмСнтС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… исполняСмого Ρ„Π°ΠΉΠ»Π°, ΠΈ для Π½Π΅Π΅ выдСляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΈ создании процСсса.

2.Β Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ нСизвСстно Π½Π° этапС компиляции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

char ptype[32];

Π’ этом случаС мСсто Π² исполняСмом Ρ„Π°ΠΉΠ»Π΅ для

ptype
Π½Π΅ рСзСрвируСтся, Π½ΠΎ ΠΏΡ€ΠΈ создании процСсса для Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ выдСляСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство памяти, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ нулями, Π² сСгмСнтС BSS.