Re: lug-bg: Задачка Закачка: Bash
- Subject: Re: lug-bg: Задачка Закачка: Bash
- From: Vasil Kolev <vasil@xxxxxxxxxx>
- Date: Tue, 30 Nov 2004 12:22:13 +0200
- Organization: Ludost Networks
On вт, 2004-11-30 at 12:06 +0200, Aleksandar Valchev wrote:
> Да, exec-а преебава простотията. Вместо exec сложих system(). Със system() май
> върви по-добре, накара ме да си рестартирам PC-то (като се има на предвид, че
> няма никакви limits). Мисля си, че е по-добре да се ловят сигналите SIGKILL,
> SIGSTOP (да не може да се спре изпулнението, чрез kill), но чрез системното
> извикване signal(), не става. В ман page на signal() пише, че може да
> игнорираш или да хванеш всички сигнал изключение на SIGKILL и SIGSTOP, като
> същото се отнася и за sigaction (евала на Linux :) ).
>
Абе има си fork(), защо преоткриваш колелото...
> Не мисля, че трябва нещо да пишеш в buffer-a за да зеeма памет. Би трябвало
> malloc() да заделя памет и тя си остава заделена, без значение дали си
> записал нещо в нея или не :). Якото е, че не се освобождава :).
>
Хм, май трябва да видиш как работи ядрото. По принцип памет се заделя
само логически, физически замаш страница в паметта чак като започнеш да
пишеш в нея. Пробвай,пусни нещо да malloc-ва, и гледай резултата с top.
Ето така изглежда една класическа fork() бомба:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
char *fillbuff;
while (42)
{
fork();
fillbuff=malloc(4096);
*fillbuff='A';
}
return 0;/* never reached */
}
Вместо malloc може да се заделя shared memory, което е още по-страшно,
понеже тя се освобождава доста по-трудно, и не мога да се сетя дали
можеше и да се лимитира.
Attachment:
signature.asc
Description: This is a digitally signed message part
|