Здравствуйте, интересно как на C++ пишется fork-бомба. Вот нашел этот код: Code: #include <unistd.h> int main() { while(1) fork(); } Всё да ничего, но выдаёт ошибку, вот только уже не помню какую. P.S. C++ начал изучать две недели назад
VIP Варианты: 1. Использовать структуру данных список; 2. использовать функцию realloc; 3. написать свою функцию-аналог realloc; 4. всякий изврат типа сделать рекурсивную функцию со статическим массивом - и по мере вложенности увеличивать счетчик, а в конце - создавать массив и записывать, идя назад по рекурсии туда все элементы. Мне больше всего нравится первый вариант.
не знаю, зачем там stdafx.h надо #include <iostream> затем using namespace std; У меня вопрос - как можно перевести адрес, возвращаемый ф-цией getprocaddress в строку?
Если в настройках проекта стоит опция "Use Precompiled Header", то использование этого файла обязательно. Так что либо отключайте эту опцию, либо строчку с включением stdafx.h не трогайте (а то получите "unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?" ) char bf [10]; wsprintf(bf,"%X",GetProcAddress(LoadLibrary("kernel32.dll"),"LoadLibraryA")); Функция форматированного вывода (в данному случае выведется в хексе). Результат вывода - в bf. Можно то же самое, только сразу на консоль, тогда printf("%X",GetProcAddress(LoadLibrary("kernel32.dll"),"LoadLibraryA"));
1>------ Build started: Project: testproxy, Configuration: Debug Win32 ------ 1>Compiling with Intel(R) C++ 10.1.021 [IA-32]... (Intel C++ Environment) 1>main.cpp 1>Linking... (Intel C++ Environment) 1>xilink: executing 'link' 1>main.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function _main 1>main.obj : error LNK2019: unresolved external symbol _htonl@4 referenced in function _main 1>main.obj : error LNK2019: unresolved external symbol _bind@12 referenced in function _main 1>C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\testproxy\Debug/testproxy.exe : fatal error LNK1120: 4 unresolved externals 1>Build log was saved at "file://C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\testproxy\testproxy\Debug\BuildLog.htm" 1>testproxy - 4 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== В чем может быть проблема? Код
спасибо, работает. А как можно загрузив dll через LoadLibraryA, вызвать её по адресу - типа как на асм CALL [адрес] ?
>>А как можно загрузив dll через LoadLibraryA, вызвать её по адресу - типа как на асм CALL [адрес] ? typedef HANDLE (__stdcall*LoadLibr)(char *); ... LoadLibr addr = (LoadLibr)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"); addr("ntdll.dll"); ....
на этапе линка Сшка(VC++ 2008 как и пробовал в 2005) выдает ошибки: Code: 1>Process.obj : error LNK2028: unresolved token (0A000009) "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ) 1>Process.obj : error LNK2019: unresolved external symbol "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ) Что ей так не нравится в моей програме, учитывая что по сути там всего одна гореинструкция hWindow=FindWindow(LPCWSTR("TForm"),0); ??? Пробовал создать консольное приложение, успешно линкует и запускается.....
А как можно добавлять в стуркутру новый элемент? Как я понял из книг и лекций структура и массив отличаются только тем, что в массиве однородные объекты, а в структуре разнородные. Если это так, то массив мне подходит больше, но как ведь задавая массив нужно сразу задавать количество элементов, а оно в задаче неизвестно! Как быть?
И ещё один вопрос: Как в С реализована "защита от дураков"? Всмысле исключения, типа аналога try/except в Python?
Никак. Поэтому так часто и встречаются уязвимости типа переполнений буфера, которых в других языках не бывает.
Это что же в таком языке как С вообще нет никакой засчиты? А если я вместо переменной типа int напишу Hello, то любая прога на С у меня вылетит?