Название проги говорящее))) Скинь это файлик в system32(если не ошибаюсь), или при создании проекта попробуй убрать галочку компиляция по заголовкам.
Народ, подскажите, пожалуйста, какова максимально допустимая глубина рекурсии в компиляторе g++? Третий день отслеживаю рекурсивные вызовы в GDB и никак не могу понять в чём проблема. В коде ошибок так же не нашёл за эти три дня. Однако при увеличении кол-ва рекурсивных вызовов происходит "segmentation fault".
Выход за пределы допустимой глубины рекурсии приводит к переполнению стека ===>>>> он приводит к некорректному обращению к памяти. Так что не стоит все сообщения об ошибке воспринимать как однозначное определение причины ошибки.
По-моему для начала нужно удостовериться, что глубина рекурсии действительно превышает допустимую. Для этого, собственно, я и задал вопрос.
врядли тут компилятор при делах. все зависит от операционной системы. венда сама увеличивает страницу памяти стека при обращении к page guard (за пределами стека) За счет такой схемы страницы в одном случае могут быть не доступны и будет исключение на 100 вызовах, в другом будет простор для стека и выдержится вызов 1000 раз. Так что почти рандом.
Всем привет. Подскажите пожалуйста, что лучше изучать для новичка C# или C++ и вообще, чем они отличаются? И подкиньте линки на сайты о C++ и C#
C# медленнее С++. Он образует байт код. Зато может выполняться почти на всех компах. А С++ - конкретно под систему. Объектный код. http://www.cplusplus.com/ Я бы учил С++. Но,только консольки. А то некоторые научатся компоненты на форму кидать и орут,что они кодеры. Покупай книги Шилдта. В нете ты их не найдешь,кроме Полного справочника С++,но он тяжеловат + там сразу изучается С. Базовый Курс С++. Шилдт. Покупай.
C# - софт не компилируется и не выполняется в полной мере в *nix-системах. C/C++ - прекрасно компилируется на любой платформе, если программист брал во внимание кроссплатформенность.
Вряд ли скорость выполнения критична для новичка. Да, я такой А по сабжу - выбирать ЯП стоит исходя из того, для каких целей он нужен. Системное или кросплатформенное программирование - C++, прикладное под винду - C#
Ra$cal, http://ru.wikipedia.org/wiki/Исходный_код http://ru.wikipedia.org/wiki/Байт_код Странно,а меня учили,что С++ под винду,а уже С# под все. С для никсов.
в учебном заведении такому учить не могли. возможно ты неправильно понял, ну или препода с улицы подобрали. как и для большинства других систем.
Здравствуйте, хотел разобраться с иньекцией dll, visual c++ 2008 Использую код иньектора: Code: #include "stdafx.h" #include <winsock2.h> #include <stdio.h> #include <windows.h> #include <tlhelp32.h> #include <tchar.h> #include <iostream> using namespace std; BOOL ProcessCreate(LPCWSTR Cmd, BOOL Suspended, PROCESS_INFORMATION& pi) { STARTUPINFO si; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); if(!CreateProcess((LPCWSTR)Cmd, NULL, NULL, NULL, FALSE, /*(Suspended)?CREATE_SUSPENDED:*/0, NULL, NULL, &si, &pi))return TRUE; return TRUE; } LPVOID ProcessMemoryAlloc(HANDLE Process, UINT Size) { return VirtualAllocEx(Process,NULL,Size,MEM_COMMIT,PAGE_READWRITE); } VOID ProcessMemoryFree(HANDLE Process, LPVOID Addr) { VirtualFreeEx(Process, Addr, 0, MEM_DECOMMIT); } BOOL ProcessWrite(HANDLE Process, LPVOID Addr, LPCVOID Data, UINT Length) { DWORD written; if(!WriteProcessMemory(Process, Addr, Data, Length, &written))return FALSE; return written == Length; } BOOL ProcessExecute(HANDLE Process, LPTHREAD_START_ROUTINE ThreadProc, LPVOID Param, LPDWORD Result) { DWORD ThreadId; HANDLE hThread = CreateRemoteThread(Process,NULL,0,ThreadProc, Param, 0, &ThreadId); WaitForSingleObject(hThread, INFINITE); GetExitCodeThread(hThread, Result); cout << Result; return TRUE; } HMODULE ProcessLoadLibrary(HANDLE Process,LPCWSTR DllPath,UINT Length) { if(!Length)Length = lstrlen(DllPath) + 1; cout << Length; LPTHREAD_START_ROUTINE LoadLibraryAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary(_T("kernel32.dll")),"LoadLibraryA"); LPVOID MemAddr = ProcessMemoryAlloc(Process,Length); if(!MemAddr)return NULL; if(!ProcessWrite(Process, MemAddr, DllPath, Length))return NULL; DWORD Result; if(!ProcessExecute(Process, LoadLibraryAddr, MemAddr, &Result))return NULL; ProcessMemoryFree(Process, MemAddr); return (HMODULE)Result; } BOOL ProcessFreeLibrary(HANDLE Process,LPCWSTR DllPath,UINT Length) { if(!Length)Length = lstrlen(DllPath) + 1; LPTHREAD_START_ROUTINE FreeLibraryAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary(_T("kernel32.dll")),"FreeLibraryA"); LPVOID MemAddr = ProcessMemoryAlloc(Process,Length); if(!MemAddr)return NULL; if(!ProcessWrite(Process, MemAddr, (LPCVOID)DllPath, Length))return FALSE; DWORD Result; if(!ProcessExecute(Process, FreeLibraryAddr, MemAddr, &Result))return FALSE; ProcessMemoryFree(Process, MemAddr); return TRUE; } void main() { PROCESS_INFORMATION pi; if(!ProcessCreate(_T("C:\\WINDOWS\\NOTEPAD.EXE"), TRUE, pi)) { MessageBox(0,TEXT("Cannot create process!"),TEXT("Error!"),0); return; } if(!ProcessLoadLibrary(pi.hProcess,_T("C:\\folder\\DLLALLCH.dll"),0)) { MessageBox(0,TEXT("Cannot load library!"),_T("Error!"),0); return; } ProcessFreeLibrary(pi.hProcess,_T("C:\\folder\\DLLALLCH.dll"),0); ResumeThread(pi.hThread); } Код dll: Code: #include "stdafx.h" #include <windows.h> HANDLE hThread; DWORD ThreadId; DWORD WINAPI ThreadProc(LPVOID p) { MessageBox(0, TEXT("Injected =)"), 0, 0); return TRUE; } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if(fdwReason == DLL_PROCESS_ATTACH) { hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, &ThreadId); DisableThreadLibraryCalls(hinstDLL); } return TRUE; } Все компилируется без ошибок, путь к библиотеке C:\folder\DLLALLCH.dll, при запуске инъектора выдает сообщение "Cannot load library!" с чем это связано ?