1. C++ / Говнокод #22732

    −21

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    if (i == k)
            return true;
        else if (i != k)
            return false;
        else
            return !true && !false;

    Запостил: Abbath, 03 Апреля 2017

    Комментарии (27) RSS

    • It's not your regular boolshit, it's an advanced boolshit.
      Ответить
    • Защита от:
      #define true 0
      #define false 42
      Ответить
      • #define if(x) if(!(x))
        Ответить
      • если хочешь защищаться от долбоёжиков, защищайся правильно:
        #ifdef true
        #undef true
        #endif
        #ifdef false
        #undef false
        #endif
        Ответить
        • # #undef true

          #error "Вычислите этого долбоёжика по git-blame!"
          Ответить
        • Защищайся!
          char *puts(char *s)
          {
              printf("Xyu!\n");
          }
          Ответить
          • #include <stdio.h>
            int main(int argc, char **argv){
             argv[0] = (char *)puts;
             ((void(*)(char *))*argv)("Xyu!\n");
            }


            https://ideone.com/RY5qlv
            Ответить
            • #include <stdio.h>
              int main(int argc, char **argv){
               argv[0] = (char *)puts;
               argv[1] = "Xyu!\n";
               ((void(*)(char *))*argv)(argv[argc]);
              }


              https://ideone.com/2EzHiH
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • int main(int argc, char**argv) { return ((int(*)())argv[1])(); }
                Ответить
                • Это зачем здесь?
                  Ответить
                • #include <stdio.h>
                  int main(int argc, char **argv){
                      char *p = __builtin_return_address(0);
                      printf("%c%c%c\n", p[3]+2*p[2], p[3]+2*p[2]+1, p[3]+2*p[2]-3);
                      return 0;
                  }


                  https://ideone.com/GVXfi0
                  Ответить
                  • Работает и на x86-32, и на x86-64. На других процессорах уже выведет другую строку.

                    P.S. Шланг выводит ту же строку, что и gcc. Значит, у него эти байтики совпали.
                    Ответить
                    • В общем, будет работать во всех кококококомпиляторах, в которых эпилог функции начинается с push ebp/rbp; mov ebp/rbp, esp/rsp. Если кокококомпилятор использует enter или stack frame omission, то ожидаемая строка не получится.
                      Ответить
              • #include <stdio.h>
                char *__attribute__((section(".text"))) xyu = "H1\xc0H\xff\xc0H\x89\xc7hXuy!H\x89\xe6H1\xd2\xb2\x04\x0f\x05H1\xc0\xb0<H1\xff\x0f\x05";
                int main(int argc, char **argv){
                    ((void(*)(void))xyu)();
                }


                https://ideone.com/kc74Qf
                Работает только на 64-битных прыщах.
                Ответить
                • > __attribute__((section(".text")))
                  И именно поэтому я против «DEP». Всю красоту поганит.
                  Ответить
                • Въеби const и можно будет без атрибута: https://ideone.com/9uwH3P
                  Ответить
                  • Я за «((void(*)(void))"xuy")()», без анскилльной «переменной».
                    Ответить
                  • Для формата «a.out», у которого всего три секции с фиксированными атрибутами (".text" только для чтения с возможностью исполнения, ".data" read&write без выполнения, ".bss" read&write без начальных значений) это сойдёт, потому что там принято константы класть в ".text".

                    Для других форматов экзешников в общем случае данные с атрибутом const не обязаны лежать в ".text" и не обязаны иметь атрибут выполнения.
                    Ответить
                • А теперь совместим это с такой техникой:
                  http://govnokod.ru/24481
                  http://govnokod.ru/11319
                  Ответить
            • : хуец wordlist dup set-current swap 1+ ;
              : хуй get-order nip 1- set-order ;
              0
              хуец
              : хуй bye хуй ;
              хуец
              : хуй type хуй ;
              хуец
              : хуй parse хуй ;
              хуец
              : хуй bl хуй ;
              set-order
              хуй хуй хуй хуй хуй

              https://ideone.com/mHh6E0
              Ответить

    Добавить комментарий