[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Название проги говорящее)))
    Скинь это файлик в system32(если не ошибаюсь), или при создании проекта попробуй убрать галочку компиляция по заголовкам.
     
    #5401 cheater_man, 24 Jun 2010
    Last edited: 24 Jun 2010
  2. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Это у нас с солАйроном писькомеряние Ж)
     
  3. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
  4. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Народ, подскажите, пожалуйста, какова максимально допустимая глубина рекурсии в компиляторе g++? Третий день отслеживаю рекурсивные вызовы в GDB и никак не могу понять в чём проблема. В коде ошибок так же не нашёл за эти три дня. Однако при увеличении кол-ва рекурсивных вызовов происходит "segmentation fault".
     
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    , ты уверен что это происходит из-за рекурсии? название ошибки говорит о другом...
     
  6. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Выход за пределы допустимой глубины рекурсии приводит к переполнению стека ===>>>> он приводит к некорректному обращению к памяти. Так что не стоит все сообщения об ошибке воспринимать как однозначное определение причины ошибки.
     
  7. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Тогда остается переписать алгоритм программы. =]
     
  8. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    По-моему для начала нужно удостовериться, что глубина рекурсии действительно превышает допустимую. Для этого, собственно, я и задал вопрос.
     
  9. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    врядли тут компилятор при делах. все зависит от операционной системы. венда сама увеличивает страницу памяти стека при обращении к page guard (за пределами стека)

    За счет такой схемы страницы в одном случае могут быть не доступны и будет исключение на 100 вызовах, в другом будет простор для стека и выдержится вызов 1000 раз. Так что почти рандом.
     
    1 person likes this.
  10. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Всем привет.
    Подскажите пожалуйста, что лучше изучать для новичка C# или C++ и вообще, чем они отличаются?
    И подкиньте линки на сайты о C++ и C#
     
  11. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    C# медленнее С++.
    Он образует байт код.
    Зато может выполняться почти на всех компах.
    А С++ - конкретно под систему. Объектный код.
    http://www.cplusplus.com/
    Я бы учил С++. Но,только консольки. А то некоторые научатся компоненты на форму кидать и орут,что они кодеры.
    Покупай книги Шилдта. В нете ты их не найдешь,кроме Полного справочника С++,но он тяжеловат + там сразу изучается С.
    Базовый Курс С++. Шилдт. Покупай.
     
    #5411 .::f-duck::., 28 Jun 2010
    Last edited: 28 Jun 2010
    1 person likes this.
  12. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    C# - софт не компилируется и не выполняется в полной мере в *nix-системах. C/C++ - прекрасно компилируется на любой платформе, если программист брал во внимание кроссплатформенность.
     
  13. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    .::f-duck::.
    омг ну что за бред пишите.

    https://forum.antichat.ru/thread89681.html
     
  14. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Вряд ли скорость выполнения критична для новичка.

    Да, я такой :cool:

    А по сабжу - выбирать ЯП стоит исходя из того, для каких целей он нужен. Системное или кросплатформенное программирование - C++, прикладное под винду - C#
     
  15. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Ra$cal,
    http://ru.wikipedia.org/wiki/Исходный_код
    http://ru.wikipedia.org/wiki/Байт_код
    Странно,а меня учили,что С++ под винду,а уже С# под все.
    С для никсов.
     
  16. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Я давно говорил, что образование в нашей стране хромает.
     
  17. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    [​IMG]
    При этом я,ни в коем случае,не отрицаю,что С++ софт нельзя перенести на другую платформу.
     
  18. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    в учебном заведении такому учить не могли. возможно ты неправильно понял, ну или препода с улицы подобрали.

    как и для большинства других систем.
     
  19. StriplOol

    StriplOol New Member

    Joined:
    14 Oct 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, хотел разобраться с иньекцией 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!" с чем это связано ?
     
  20. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    StriplOol
    у тя путь к длл в юникоде, а инжектиш через LoadLibraryA.
     
Thread Status:
Not open for further replies.