« Отговор #16 -: Nov 12, 2008, 18:29 »
И да не използва glibc, рано или късно (твърде вероятно рано) ще опре до brk(), защото heap-а му ще расте и трябва ядрото да му мап-ва физическа памет върху адресното пространство.
Освен ако разбира се не използва някаква memory allocation библиотека, която не използва brk(), а само mmap(). Например предполагам е вероятно някаква jvm да не може да се скрие по този начин. Да, при това положение няма да се скрие. Всъщност това с brk() в началото го прави ld-linux.so, значи статично-билднато нещо при форкване няма да се скрие...веднага. Ще се скрие обаче на първото място където викне malloc().
Та да, не е перфектен механизъма, защото в някои гранични случаи няма да успее. Ако прихвана и mmap() ще се гарантира по-голяма успевяемост.
Ти си прав обаче, че трябва да се прихване и fork(). Защото при създаването на child process докато не се викне brk() нямам никаква гаранция че няма да се види. А brk() може и да не вдигне, поради което разни multiprocess неща няма да могат да се скрият. Например ако реша да скрия apache (колкото и тъпо да звучи) твърде вероятно разните worker процеси ще се виждат от време на време.
А, да, друго интересно нещо, за което съм много любопитен - memcmp() "безопасна" операция ли е? В смисъл гледам, че човекът го тества с PREEMPT ядро, кво става ако се прекъсне изпълнението на кода точно докато се изпълнява (ако е възможно)?
« Последна редакция: Nov 12, 2008, 18:34 от gat3way »
Активен
"Knowledge is power" - France is Bacon