1. Лучший говнокод

    В номинации:
    За время:
  2. Java / Говнокод #26284

    0

    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
    private static void createHook(MethodNode mn,
                                   String targetClassName,
                                   String hookMethodClass,
                                   String hookMethodName,
                                   Boolean printMessages)
    {
        InsnList il = new InsnList();
        LabelNode originalLabelNode = new LabelNode();
        // Object caller, param1, param2, ...
        String hookMethodDesc = "(Ljava/lang/Object;" + mn.desc.substring(1);
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                                  isOriginalCallClassName,
                                  isOriginalCallMethodName,
                                  isOriginalCallMethodDesc,
                                  false));
        il.add(new JumpInsnNode(Opcodes.IFNE, originalLabelNode));
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("patched " + mn.name + mn.desc + " called"));
        }
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(getParamsLoadSequence(mn.desc, 1));  // other params
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC, hookMethodClass, hookMethodName, hookMethodDesc, false));
        il.add(new InsnNode(parseReturnOpcode(hookMethodDesc)));
    
        il.add(originalLabelNode);
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("original " + mn.name + mn.desc + " called"));
        }
        mn.instructions.insert(il);
    }

    Бытует мнение, что «Java» — это высокозащищённый язык, в котором невозможны всяческие си-подобные грязные хаки. На самом деле, конечно, это не так: просто чтобы прострелить себе ногу в «Жабе» — надо чуть больше постараться.

    Фрагмент небольшой самописной либы, позволяющей хукать произвольные методы, прямо как в «Microsoft Detours».

    gost, 28 Декабря 2019

    Комментарии (12)
  3. Куча / Говнокод #26029

    0

    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
    $ objdump -f libyjpagent64.so
    
    libyjpagent64.so:     file format elf64-x86-64
    architecture: i386:x86-64, flags 0x00000150:
    HAS_SYMS, DYNAMIC, D_PAGED
    start address 0x00000000000c2690
    
    
    $ readelf -h  libyjpagent64.so
    ELF Header:
      Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
      Class:                             ELF64
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              DYN (Shared object file)
      Machine:                           Advanced Micro Devices X86-64
      Version:                           0x1
      Entry point address:               0xc2690
      Start of program headers:          64 (bytes into file)
      Start of section headers:          5131216 (bytes into file)
      Flags:                             0x0
      Size of this header:               64 (bytes)
      Size of program headers:           56 (bytes)
      Number of program headers:         7
      Size of section headers:           64 (bytes)
      Number of section headers:         30
      Section header string table index: 29

    куик, зачем на прыщах две дублирующие друг друга утилиты?

    MAKAKA, 14 Ноября 2019

    Комментарии (12)
  4. Куча / Говнокод #26011

    0

    1. 1
    2. 2
    3. 3
    https://beautifulracket.com/appendix/thoughts-on-rhombus.html
    http://greghendershott.com/2019/07/future-of-racket.html
    https://github.com/racket/rhombus-brainstorming/blob/master/resources/goals.md

    Авторы Racket планируют в течение нескольких лет выпустить новый диалект языка, в котором, среди прочего, снизить порог вхождения, в том числе, вероятно, избавившись от скобочек™.

    В связи с этим возникает два вопроса:
    1) правда ли они думают, что сложность освоения Racket и lisp-подобных языков в скобочках (а не например в мощной системе макросов, метапрограммирования и возможности написания языков в языке)
    2) переизобретут ли они Dylan спустя три десятка лет

    Desktop, 04 Ноября 2019

    Комментарии (12)
  5. PHP / Говнокод #25738

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    я проснулся во время кошмара - мне приснилась какая то красная хуйня в розовых носочках, которая кричала "пхп мое наслаждение, я хочу ещё"
    я уже должен был проснуться ведь петухи во сне - не к добру, но я смотрел дальше и это оказался всего навсего обосанный бомж у метро, кушающий банан
    просто у него нет денег и носит розовые носочки с красными понталонами, чтобы согреться. Ну что я рассказываю - обычный пхп кодир...
    ну вообщем я смотрю на бомжа этого, вроде бы чего просыпаться то, поржать можно же, но потом в небе появляются летающие буквы 'p' и 'h' и 
    тогда я почувствовал что скоро начнется пиздец мирового масштаба, ведь даже индусы стали танцевать танец в честь пхп и одна девка 
    с индийским голосом из фильмов пропела "ооо май пхп ааааай яяяяяя" и тогда слева меня появилась проститутка которая готова была отдаться мне
    за то, что я научу её пхп, я конечно же отказал, ведь параши коснешься - петухом станешь, ну вот, а чего просыпаться то все же?
    а там потом буквы 'p' и 'h' начали появляться везде и я видел как слово 'php' подходит ко мне, а сзади него АРМИЯ ПХП !!! тогда 
    я побежал далекоооо и залез на башню, где было так тихо, я сел на пол и смотрел в окно, которого нет, а потом появился скример и с надписью
    'php найдет тебя, ты станешь петухом'. Я закричал и проснулся. Блять, больше никаких сайтов с '.php'...

    Ksyrx, 29 Июля 2019

    Комментарии (12)
  6. Java / Говнокод #25727

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public static Date getMinDate(List<Date> dates) {
        Preconditions.checkArgument(dates != null && !dates.isEmpty(), "Dates list must be not null and not empty");
        dates.sort(Comparator.naturalOrder());
        return dates.get(0);
      }

    ну а че

    snml, 22 Июля 2019

    Комментарии (12)
  7. Си / Говнокод #25665

    +1

    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
    // 3.7 Position-independent Limitation
    // At runtime an MRE program needs to be dynamically loaded into RAM. In other words, the addresses of the variables and functions can be dynamically assigned when they are loaded. This requires that the code be position-independent. If the code needs to determine the addresses at compile time, then it will fail to compile.
    // The following code exemplifies this error.
    /* 1 */
    int a[10], b[10];
    struct c {
            int* d;
            int* e;
    };
    struct c f = {a, b};
    
    /* 2 */
    void func1(void) {}
    typedef struct struct1 {
    int a;
    void (*fun)(void);
    } struct1;
    struct1 array1[1] = {0, func1};
    
    /* 3 */
    char *str = "test";
    char * list[] = {"zero", "one", "two"};
    
    // The solution is as follows:
    /* 1 */
    int a[10], b[10];
    struct c {
        int* d;
        int* e;
    };
    struct c f;
    void init1(void) {
        f.d = a;
        f.e = b;
    }
    
    /* 2 */
    void func1(void) {}
    typedef struct struct1 {
        int a;
        void (*fun)(void);
    } struct1;
    struct1 array1[1];
    void init2(void) {
        array1[0].a = 0;
        array1[0].fun = func1;
    }
    
    /* 3 */
    char str[] = "test";
    char list[][10] = {"zero", "one", "two"};

    MRE Developer FAQ
    This document contains information that is proprietary to MediaTek Inc.

    Загрузчик программ из MRE не умеет сложные фиксапы, поэтому изменяйте свой код, чтобы в нём не было адресов, которые нужно определять в момент загрузки.

    PA3yMHblu_nemyx, 07 Июня 2019

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

    +2

    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
    #include "stdio.h"
    #include "conio.h"
    #define infinity 999
    
    namespace belugina
    {
    void dij(int n,int v,int cost[10][10],int dist[])
    {
     int i,u,count,w,flag[10],min;
     for(i=1;i<=n;i++)
      flag[i]=0,dist[i]=cost[v][i];
     count=2;
     while(count<=n)
     {
      min=99;
      for(w=1;w<=n;w++)
       if(dist[w]<min && !flag[w])
        min=dist[w],u=w;
      flag[u]=1;
      count++;
      for(w=1;w<=n;w++)
       if((dist[u]+cost[u][w]<dist[w]) && !flag[w])
        dist[w]=dist[u]+cost[u][w];
     }
    }
    }

    Я разгадала знак бесконечности.
    #define infinity 999

    dethless, 19 Мая 2019

    Комментарии (12)
  9. Си / Говнокод #25613

    +2

    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
    bool End_Range (FILE * f){
      int tmp;
      tmp = fgetc(f);
      tmp = fgetc(f);
      if (tmp != '\'') fseek(f,-2,1);
      else fseek(f,1,1);
      return tmp == '\'' ? true : false;
    }
    
    void Natural_Merging_Sort (char *name){
      int s1, s2, a1, a2, mark;  FILE *f, *f1, *f2;  s1 = s2 = 1;
      while ( s1 > 0 && s2 > 0 ){
       	 mark = 1; s1 = 0; s2 = 0;
        	 f = fopen(name,"r"); f1 = fopen("nmsort_1","w"); 
    		 f2 = fopen("nmsort_2","w"); fscanf(f,"%d",&a1);
       	 if ( !feof(f) ) fprintf(f1,"%d ",a1);
       	 if ( !feof(f) ) fscanf(f,"%d",&a2);
        	 while ( !feof(f) ){
         		 if ( a2 < a1 ) {switch (mark) {
              				case 1:{fprintf(f1,"' "); mark = 2; s1++; break;}
             				case 2:{fprintf(f2,"' "); mark = 1; s2++; break;}
            		  }}
    if ( mark == 1 ) { fprintf(f1,"%d ",a2); s1++; }
          	else { fprintf(f2,"%d ",a2); s2++;}
          	a1 = a2; fscanf(f,"%d",&a2);
        	}
        if ( s2 > 0 && mark == 2 ) { fprintf(f2,"'");}
        if ( s1 > 0 && mark == 1 ) { fprintf(f1,"'");}
        fclose(f2); fclose(f1); fclose(f);
        cout << endl;
        Print_File(name);
        Print_File("nmsort_1");
        Print_File("nmsort_2");
        cout << endl;
      f = fopen(name,"w");  f1 = fopen("nmsort_1","r");
        f2 = fopen("nmsort_2","r");
        if ( !feof(f1) ) fscanf(f1,"%d",&a1);
        if ( !feof(f2) ) fscanf(f2,"%d",&a2);
        bool file1, file2;
        while ( !feof(f1) && !feof(f2) ){	file1 = file2 = false;
          	while ( !file1 && !file2 ) {
            		if ( a1 <= a2 ) { fprintf(f,"%d ",a1); 
    				  file1 = End_Range(f1); fscanf(f1,"%d",&a1);	}
            else { fprintf(f,"%d ",a2); file2 = End_Range(f2);
              fscanf(f2,"%d",&a2);	}
          } 
    while ( !file1 ) {		fprintf(f,"%d ",a1);
            file1 = End_Range(f1);  fscanf(f1,"%d",&a1);	}
     while ( !file2 ) {	fprintf(f,"%d ",a2);  
    				file2 = End_Range(f2); fscanf(f2,"%d",&a2);	}
        }	file1 = file2 = false;
        while ( !file1 && !feof(f1) ) {	fprintf(f,"%d ",a1);
          		file1 = End_Range(f1); fscanf(f1,"%d",&a1);	}
        while ( !file2 && !feof(f2) ) {	fprintf(f,"%d ",a2);
          		file2 = End_Range(f2); fscanf(f2,"%d",&a2);	}
        fclose(f2); fclose(f1); fclose(f);
      }	 remove("nmsort_1");  remove("nmsort_2");
    }

    Потеряли пульт от телевизора? Найди его бинарным поиском!!!

    dethless, 19 Мая 2019

    Комментарии (12)
  10. Куча / Говнокод #25478

    0

    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
    integers =: adverb def 'i.u'
       5 integers
    0 1 2 3 4
       
       plus =: adverb def '(}:u) + {:u'
       2 3 plus
    5
       1 2 3  1 plus
    2 3 4
       
       inc =: adverb def '(u , 1) plus'
       5 inc
    6
       5 integers inc
    1 2 3 4 5
       
       factorial =: integers inc product
       0 factorial
    1
       7 factorial
    5040

    Так то лучше, а то надоело справа налево писать.

    COTOHuHCKuu_nemyx, 25 Марта 2019

    Комментарии (12)
  11. Куча / Говнокод #25455

    +1

    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
    !DOCTYPE html>
    <html>
    <%c++
        auto para=@@.get<std::map<std::string,std::string>>("parameters");
    %>
    <head>
        <meta charset="UTF-8">
        <title>{{ title }}</title>
    </head>
    <body>
        <%view header %>
        <%c++ if(para.size()>0){%>
        <H1>Parameters</H1>
        <table border="1">
          <tr>
            <th>name</th>
            <th>value</th>
          </tr>
          <%c++ for(auto iter:para){%>
          <tr>
            <td>{%iter.first%}</td>
            <td><%c++ $$<<iter.second;%></td>
          </tr>
          <%c++}%>
        </table>
        <%c++ }else{%>
        <H1>no parameter</H1>
        <%c++}%>
    </body>

    C++ шаблонизатор
    https://github.com/an-tao/drogon/blob/master/examples/simple_example/ListParaView.csp

    HEymHblu_nemyx, 19 Марта 2019

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