1. Список говнокодов пользователя ReL

    Всего: 10

  2. C++ / Говнокод #8757

    +1001

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    // Функция регистрирующая ошибку
    VOID SetError(DWORD dwError)
    {
        CHAR szErr[256];
        sprintf(szErr, "%lu", dwError);
        SetEnvironmentVariable("0xdeadc0de", szErr);
    }
    
    // Шеллкод
    __declspec(dllexport)
    VOID WINAPI Shell(REMSTART *pCtx)
    {
        pCtx->pLoadLibraryA(pCtx->sz);
        
        CHAR szVar[] = {'0','x','d','e','a','d','c','0','d','e','\0'};
            
        CHAR szErr[256];
        
        if (!pCtx->pGetEnvironmentVariableA(szVar, szErr, sizeof(szErr)))
            pCtx->pExitThread(ERROR_LOAD_HOOK_DLL);
        
        DWORD dwError = 0;
    
        for (DWORD i = 0; szErr[i]; i++)
        {
            dwError *= 10;
            dwError += szErr[i] - '0';
        }
    
        pCtx->pExitThread(dwError);
    }

    Удивительнейший способ регистрации ошибок в функции DllMain при инжекте библиотеки шеллкодом из другого процесса (кто знает - тот поймет)... линк: http://www.wasm.ru/forum/viewtopic.php?id=43291

    ReL, 07 Декабря 2011

    Комментарии (22)
  3. C++ / Говнокод #7387

    +147

    1. 1
    2. 2
    // В деструкторе класса
    if(this) this->Free(this);

    фрагмент самоудаляемого объекта, который привязан к определенному классу, который реализует пул-памяти... впринципе не говнокод, но у многих подобные объекты в начале вызывают недоумение...

    ReL, 29 Июля 2011

    Комментарии (17)
  4. C++ / Говнокод #6394

    +166

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    template <typename RetT> RetT Max() { return (RetT)0; }
    
    template <typename RetT, typename ArgT, typename ... Args> RetT Max(ArgT Arg1, Args ... args)
    { RetT Temp = Max<RetT>(args ...); return ((RetT)Arg1 > Temp) ? ((RetT)Arg1) : (Temp); }
    
    int main(int argc, char* argv[])
    {
        printf("%d\n", Max<int>(100, 200.356, false, -300));
        return 0;
    }

    оцените полет человеческой мысли и чудеса нового стандарта С++0x... семпл мой, правда довольно редко используется...

    ReL, 19 Апреля 2011

    Комментарии (80)
  5. Си / Говнокод #6290

    +135

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    PIMAGE_FILE_HEADER    pfh;
    PIMAGE_SECTION_HEADER    psh;
    PIMAGE_OPTIONAL_HEADER  poh;
    PVOID aa = LoadLibrary("calc.exe");
    GetHeaders((PCHAR) aa, &pfh, &poh, &psh);
    PPEB aae=GetPEB();
    aae->ImageBaseAddress = aa;
    LPVOID entry = (LPVOID)( (DWORD)aa + poh->AddressOfEntryPoint );
    __asm {
           call dword ptr [entry]
           }

    ссыль: http://www.wasm.ru/forum/viewtopic.php?pid=427180

    ReL, 08 Апреля 2011

    Комментарии (8)
  6. C++ / Говнокод #6173

    +159

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    HMODULE nt=LoadLibrary("Ntdll.dll");
    PROCESS_BASIC_INFORMATION pbi={0};
    ZWQUERYINFORMATIONPROCESS _ZwQueryInformationProcess;
    _ZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)GetProcAddress(nt, "ZwQueryInformationProcess");
    DWORD rlg;
    SetLastError(0);
    _ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg);
    printf("%d",GetLastError());

    источник: http://www.wasm.ru/forum/viewtopic.php?pid=426270#p426270

    ReL, 31 Марта 2011

    Комментарии (15)
  7. C++ / Говнокод #6075

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    BOOL NAKED CompareCurrentProcess(PCHAR pszName)
    {
        /*
            1. Found PEB
            2. Found _RTL_USER_PROCESS_PARAMETERS
            3. Found _RTL_USER_PROCESS_PARAMETERS->ImagePathName
            4. Convert UNICODE to ANSI
            5. compare strings
        */
        __asm {
            MOV        ESI,ESP                            // SAVE STACK PTR
    
            MOV        EAX,DWORD PTR FS:[0x30]            // eax == PEB
            MOV        EAX,DWORD PTR DS:[EAX+0x10]        // eax == _RTL_USER_PROCESS_PARAMETERS
            ADD        EAX,0x38                        // eax == _RTL_USER_PROCESS_PARAMETERS->ImagePathName
            
            XOR        EDX,EDX                            //
            XOR        ECX,ECX                            //
            XOR        EDI,EDI                            //
                    
            MOV        CL, BYTE PTR [EAX]                // CL = UNICODE_STRING.Length in bytes
            
            SUB        ESP,ECX                            // reserve in stack CL bytes 
                        
            ADD        EAX,4                            // EAX ptr to WCHAR ImagePathName
            MOV        EAX,DWORD PTR [EAX]                // EAX = PWCHAR
    
    next_char:
            CMP        CL,0                            // WCHAR end
            JZ        end;
    
            MOV        DL,BYTE PTR [EAX]                // DL == *(PCHAR)WCHAR
            ADD        EAX,2                            // GOTO next WIDEchar
            MOV        BYTE PTR [ESP],DL                // SAVE char in memory reserved in stack
            INC        ESP                                // pStr++
            INC        EDI                                // pStrLen++
            SUB        CL,2                            // Length--;
            jmp        next_char                        // goto_next;
    end:
            MOV        BYTE PTR [ESP],0                // *pStr = 0; null terminated
            SUB        ESP,EDI                            // pStr = (PCHAR)(pStr - pStrLen)
            
            XOR        EDX,EDX
            XOR        ECX,ECX
    
            mov        ecx,esp                            // ecx = pStr
            mov        edx,esp                            // edx = pStr
    
            //
            // HERE FOUND image file name 
    m_loop:
            cmp        edi,0
            jz        file_founded
    
            cmp        byte ptr [edx],0x5C                // '\'
            JZ        founded;
            inc        edx
            dec        edi
            jmp        m_loop
    
    founded:
            dec        edi
            mov        ecx,edx
            inc        edx
            jmp        m_loop
    
    file_founded:
            push    esi
            inc        ecx
            push    ecx
            push    dword ptr [esi+4]
            call    my_strcmp
    
            pop        esi
            mov        esp,esi
    
            ret        
        }
    }

    Источник: http://www.wasm.ru/forum/viewtopic.php?id=40652
    Что может быть плохого в функции кроме того, что эту задачу можно было бы решить тонной адекватных вариантов?

    ReL, 23 Марта 2011

    Комментарии (16)
  8. C++ / Говнокод #5710

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    #ifdef WIN32
        string nameOfLibToLoad("C:\opt\lib\libctest.dll");
        lib_handle = LoadLibrary(TEXT(nameOfLibToLoad.c_str()));
        if (!lib_handle) {
            cerr << "Cannot load library: " << TEXT(nameOfDllToLoad.c_str()) << endl;
        }
    #else
        string nameOfLibToLoad("/opt/lib/libctest.so");
        lib_handle = dlopen(nameOfLibToLoad.c_str(), RTLD_LAZY);
        if (!lib_handle) {
            cerr << "Cannot load library: " << dlerror() << endl;
        }
    #endif

    кроссплатформенная загрузка шаренной библиотеки... может я чего то не понимаю в этой жизни, но... совершенно здесь лишний класс строки, который делает совершенно лишний вызов конструктора и добавляет совершенно лишние n-килобайт к размеру сборки...
    ссыль: http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

    ReL, 18 Февраля 2011

    Комментарии (11)
  9. C++ / Говнокод #5592

    +170

    1. 1
    double* (*(*(*fp)(int*,int*,int*))[])(float*,float*,float*);

    уже третий семпл из жгучей темы на форуме сайта wasm.ru... я цитирую: "Объявление указателя на функцию, принимающую 3 аргумента-указателя на int, а возвращающая указатель на массив указателей на функцию принимающую 3 аргумента-указателя на float и возвращающую указатель на double"))) http://www.wasm.ru/forum/viewtopic.php?pid=419403#p419403

    ReL, 08 Февраля 2011

    Комментарии (31)
  10. C++ / Говнокод #5571

    +164

    1. 1
    i = j ? k : l = m;

    опять же с форума wasm.ru... пол дня объяснял почему с++ компилятор трактует это выражение как i = j ? k : (l = m), а никак по-другому... не пишите такую чушь никогда)

    ReL, 07 Февраля 2011

    Комментарии (26)
  11. Си / Говнокод #5561

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    #include <intrin.h>
    #include <stdarg.h>
    #include <stdio.h>
    int func()
    {
    va_list vl;
    int i;
    int arg,Z=1;
    va_start(vl,*(int *)_AddressOfReturnAddress());
    for(i=0;i<5;i++)
        {
             arg=va_arg(vl,int);    
             Z=arg*Z;
        }
     return(Z);
    }
    
    int main(void)
    {
    printf("%d",func(1,2,3,4,5));
    getchar();
    return 0;
    }

    гуру-вычисление факториала пяти одного красавчика с форума wasm.ru... был выведен, как пример функции с переменным числом параметров без единого явного параметра... грязный хак с адресом возврата на стеке - моя идея)))

    ReL, 07 Февраля 2011

    Комментарии (37)