[C++] Program do zapełniania pamięci RAM

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
sibul
Wytworny Kaczor
Wytworny Kaczor
Posty: 318
Rejestracja: 16 paź 2007, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

[C++] Program do zapełniania pamięci RAM

Post autor: sibul »

Witam proszę o pomoc w napisaniu programu (C++) który zapętli wywoływanie funkcu fork(); Jak wiadomo fork powołuje do pracy nowy proces itd itd. I program ma się zapętlić. Gdy się go uruchomi zapełni całą pamięć jedynie roota bo user nie ma praw by zajać całą dostępną pamieć.
OS X 10.8.3
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: Dwimenor »

Może wzoruj się na bashowej forkbombie?
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: adrian5632 »

Bo zapytanie wujka google oczywiście boli... http://pl.wikipedia.org/wiki/Fork-bomba
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
Awatar użytkownika
doles2
Sędziwy Jeż
Sędziwy Jeż
Posty: 46
Rejestracja: 24 lip 2006, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: doles2 »

I tak najprawdopodobniej Ci się to nie uda ponieważ w Linuksie masz pewien limit (RLIMIT_NPROC) i mówi on ile dany użytkownik może uruchomić maksymalnie kopii danego procesu. Każdy proces, który wywołuje funkcję fork() ma także swojego właściciela (UID użytkownika). No i jeśli Twój program za bardzo się rozmnoży do liczby RLIMIT_NPROC wówczas każde następne wywołanie fork() zawiedzie. Można ten limit zmieniać przy pomocy programu ulimit albo edytując /etc/security/limit.conf
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: el.pescado »

Witam proszę o pomoc w napisaniu programu (C++) który zapętli wywoływanie funkcu fork(); Jak wiadomo fork powołuje do pracy nowy proces itd itd. I program ma się zapętlić. Gdy się go uruchomi zapełni całą pamięć jedynie roota bo user nie ma praw by zajać całą dostępną pamieć.
A nie prościej po prostu w pętli uruchamiać malloc() ?
Poza tym, Linux używa mechanizmu copy-on-write podczas tworzenia nowych procesów, co oznacza, że nowa pamięć będzie przydzielana dopiero w momencie próby modyfikacji strony pamięci (do tego momentu strony są współdzielone).
Awatar użytkownika
sibul
Wytworny Kaczor
Wytworny Kaczor
Posty: 318
Rejestracja: 16 paź 2007, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: sibul »

Użytkownik ma ograniczenia, root niema. I domyślnie jeśli ktoś nie ma ustalonych limitów to zawiesi mu cały system na pewno.
OS X 10.8.3
bogaczew
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 211
Rejestracja: 13 gru 2006, 21:12
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: bogaczew »

doles2 pisze:I tak najprawdopodobniej Ci się to nie uda ponieważ w Linuksie masz pewien limit (RLIMIT_NPROC) i mówi on ile dany użytkownik może uruchomić maksymalnie kopii danego procesu. Każdy proces, który wywołuje funkcję fork() ma także swojego właściciela (UID użytkownika). No i jeśli Twój program za bardzo się rozmnoży do liczby RLIMIT_NPROC wówczas każde następne wywołanie fork() zawiedzie. Można ten limit zmieniać przy pomocy programu ulimit albo edytując /etc/security/limit.conf
tyle że valinilowe linuksy mają nproc unlimited, i trzeba sobie dopiero limity ustawić. jestem 'głęboko przekonany' że fork bomb zadziała na systemach 90% użytkowników tego forum

pochwalcie się co wypisuje wam ulimit -u

Kod: Zaznacz cały

pawel@alef ~ % ulimit -u
300
pawel@alef ~ % 
Awatar użytkownika
amorfic
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 03 lis 2008, 22:02
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: amorfic »

bogaczew pisze:tyle że valinilowe linuksy mają nproc unlimited, i trzeba sobie dopiero limity ustawić. jestem 'głęboko przekonany' że fork bomb zadziała na systemach 90% użytkowników tego forum

pochwalcie się co wypisuje wam ulimit -u

Kod: Zaznacz cały

pawel@alef ~ % ulimit -u
300
pawel@alef ~ % 
u mnie tak:

Kod: Zaznacz cały

piotr@jarjarbings:~$ ulimit -u
16381

Kod: Zaznacz cały

root@jarjarbings:/home/piotr# ulimit -u
16381
Awatar użytkownika
sibul
Wytworny Kaczor
Wytworny Kaczor
Posty: 318
Rejestracja: 16 paź 2007, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: sibul »

@amorfic nie pokazuj polecenia roota bo root zawsze ma możliwość zapełnienia pamięci.

Kod: Zaznacz cały

rut@ubuntu:~$ ulimit -u
500
OS X 10.8.3
Awatar użytkownika
amorfic
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 03 lis 2008, 22:02
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: amorfic »

pierwszy podany wynik ulimit jest z mojego podst. konta użytkownika
kamil4521
Piegowaty Guziec
Piegowaty Guziec
Posty: 27
Rejestracja: 16 lut 2008, 20:07
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: kamil4521 »

kamil@laptong:~$ ulimit -u
250

Standardowo ubuntu nie ma ustawionego limitu procesów. Proponował bym, aby przy tworzeniu zlokalizowanej dystrybucji Ubuntu, twórcy co dobierają programy wstawili standardowo jakiś przyzwoity limit.
RoXeon
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 11 lip 2006, 10:18
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: RoXeon »

Kod: Zaznacz cały

#include <cstdlib>
int main() {
  while(1) {
     fork();
     int*p=new int;
  }     
}
To cudo spokojnie powiesi 80% komputerów. Tylko ustawienie limitów przed tym ratuje.
RoXeon
Registered Linux user #423407
wojtusp7
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 14 gru 2010, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: wojtusp7 »

Kod: Zaznacz cały

ulimit -u
unlimited
Kurde ja mam to na rocie i użytkowniku.
Jak zmienię to wtedy blokuje mi ten atak .Ale jak włączę następny terminal to mam wcześniejsze ustawienia i komputer się wiesza. Jak na stałe zmienić ustawienia ?
Zmieniam tak ulimit -u 30
bogaczew
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 211
Rejestracja: 13 gru 2006, 21:12
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: bogaczew »

wpisz limity w /etc/security/limits.conf

przeczytaj też http://www.cyberciti.biz/tips/linux-lim ... ocess.html

jako ciekawostkę dodam, że na osx mam defaultowo

Kod: Zaznacz cały

pawel@pi:~$ ulimit -u
266
pawel@pi:~$
wydaje się dosyć niskie, ale nigdy nie było to ograniczeniem
wojtusp7
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 14 gru 2010, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++] Program do zapełniania pamięci RAM

Post autor: wojtusp7 »

Dzięki za link, bardzo pomogło :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości