1. Java / Говнокод #19142

    −32

    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
    MethodHandle mov256MH = CodeSnippet.make("move256",
         MethodType.methodType(void.class,            // return type
                               Object.class /*rdi*/,  // src
                               long.class   /*rsi*/,  // offset
                               Object.class /*rdx*/,  // dst
                               long.class   /*rcx*/), // offset
         CPUID.has(AVX),
         0xC4, 0xE1, 0x7E, 0x6F, 0x04, 0x37,  // vmovdqu ymm0,[rsi+rdi]
         0xC4, 0xE1, 0x7E, 0x7F, 0x04, 0x0A); // vmovdqu [rdx+rcx],ymm0
    
    
       static void move256(Object src, long off1, Object dst, long off2) {
           try {
               mov256MH.invokeExact(src, off1, dst, off2);
           } catch (Throwable e) {
               throw new Error(e);
           }
       }
    
       byte[] src = ...; long off1 = ...;
       byte[] dst = ...; long off2 = ...;
       move256(src, off1, dst, off2);

    Вставка машинного кода (прямо как в http://govnokod.ru/19017 ) теперь и в Java
    http://mail.openjdk.java.net/pipermail/panama-dev/2015-December/000225.html

    Запостил: j123123, 06 Декабря 2015

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

    • Остаётся протащить такие же фичи в javascript...
      Ответить
      • Тогда в браузеры надо тащить особые верификаторы опкодов, чтобы этими машиннокодными вставками кто-нибудь не сделал что-нибудь нехорошее через syscall (как вариант int 0x2e, int 0x80, sysenter и проч). Подобная система верификации опкодов есть в Google NaCl
        Ответить
        • NaCl не нужен. Бинари в браузерах тоже не нужны. Тем более платформозависимые.
          Ответить
          • Бинари не нужны, а жабаскрипт нужен? Почему это?
            Ответить
            • Когда я впервые столкнулся, меня очень огорчил размер бинарников (мегабайты). Проблема, на мой взгляд, в том, что разработчики решили не делать библиотеки, а линковать все статически (типа так проще, наверное). Т.е. рантайм практически ничего кроме ВМ не предлагает (не уверен на счет libc).
              Когда я заинтересовался этим вопросом, мне ответили, что использование планировалось через стор, т.е. загрузил один раз и пользуйся потом, а не загружать каждый раз при посещении страницы. После этого у меня интерес пропал.
              Ответить
              • О, ну это особенности конкретного подхода, выбранного разрабами этого NaCl, Наверняка можно было сделать по-другому, чтобы это все занимало мало места
                Ответить
              • Вся надежда на WebAssembly. Если взлетит, можно будет выкинуть нафик этот поганый экмаскрипт, и писать на нормально компилируемых языках для клиентсайда в вебе
                Ответить
                • А можно будет скомпилировать v8 и продолжать писать на экмаскрипте.
                  Ответить
                  • А ещё можно будет скомпилировать Trident и использовать Интернет Эксплорер в браузере.
                    Ответить
                    • Кстати, можно и остальные части Windows скомпилировать.
                      Вот у пингвинятников пригорит!
                      Ответить
                      • Тем временем пингвинятники уже гоняют kate в браузере. Ссылку лень искать, анимцо смотрю.
                        Ответить
                      • у тебя исходники винды есть?
                        Ответить
                        • У меня нет.
                          Но у кого-то же есть.
                          Ответить
                          • Ходила легенда, что слои легаси-говна в винде компилируются только специализированным компилятором для внутреннего использования.
                            Ответить
                            • Лет десять назад по интернетам блуждали два архива, состоящие из исходников Windows NT 4 и Windows 2000 (вперемешку, с вкраплениями исходников Windows XP и даже с фрагментами прототипа NT 6). В некоторых директориях там лежали старые версии MSVC, а также вспомогательные утилиты для сборки.
                              Ответить
                              • Ну и что?
                                Ответить
                                • Не было там специализированного компилятора для внутреннего использования. Только некоторое говно рекомендовалось собирать определённой версией компилятора.

                                  Однако, всё же софт для внутреннего использования был. Типа программы port1632 для портирования исходников из Windows 3.x на скорую руку.
                                  Ответить
                                  • Ну и что?
                                    Ответить
                                    • А вообще это всё не так важно. Всё равно там не все исходники. Чтобы собрать всю Винду, придётся латать дыры исходниками ReactOS подобно тому, как в «Парке юрского периода» недостающие гены динозавров латали генами лягушки.
                                      Ответить
                                  • http://opennt.net/ вот кстати какой-то форк винды на основе тех утекших исходников
                                    Ответить
                                    • Да зачем оно надо то??

                                      Это же идиотизм: реверс инженирить чужой проприетарный код с говноархитектурой

                                      Ясен пень что ты всегда будешь отставать на 10 лет

                                      Ясен пень что у всех уже восьмерка а ты только NT 4 допилил
                                      Ответить
                                      • Не вижу ничего плохого отставать, если срок отставания не увеличивается. Зато у тебя будут самые проверенные решения. Функционал с вин95 не изменился, зато потяжелело всё в тысячи раз.
                                        Ответить
                                        • А какой смысл-то в этом?

                                          Почему линукс не взять?

                                          Или это чтобы гонять софт 30ти летней давности?

                                          >> Функционал с вин95 не изменился

                                          Функционал ЧЕГО не изменился?Пасьянса "косынка"?
                                          Ответить
                                          • Интернет испортила точно он всё также тормозит радостно сверкая панельками хз откуда взявшимися.
                                            Ответить
                                            • Кстати, где тот человек, который говорил, что не любит грамотеев за то, что они выдают ошибку, когда встречают однозначные, но невалидные конструкции?
                                              Это же игра "расставь знаки, дружок" - как минимум (s+1)^(N-1) комбинаций, где s - число знаков препинания, а N - число слов, это же экспоненциальная сложность парсинга без учёта контекста, это же DoS-атака на внимательного читателя.

                                              Я джве минуты парсил и перебирал кобенации, пока не получил хоть что-то
                                              [
                                                {
                                                  value: "Интернет испортила точно",
                                                  aliases: {
                                                    "испортила": "она испортила",
                                                    "она": ["компания Microsoft", "Windows", null]
                                                  }
                                                },
                                                {
                                                  value: "Он всё также тормозит",
                                                  aliases: {
                                                    "он": "интернет"
                                                    "интернет": ["Интернет", "браузер IE", null]
                                                  }
                                                  children: [
                                                    {
                                                      value: "радостно сверкая панельками",
                                                      children: [
                                                        {
                                                          value: "хз откуда взявшимися"
                                                        }
                                                      ]
                                                    }
                                                  ]
                                                }
                                              ]

                                              Но всё же, неопределённости остались.
                                              Ответить
                                              • не надо так волноваться.
                                                >Функционал ЧЕГО не изменился?
                                                "Интернет испортила"(IE) - точно он всё также тормозит? радостно сверкая панельками хз откуда взявшимися.

                                                так легче ?
                                                Ответить
                                                • Если честно, не легче. Информации уже больше, но что за "Интернет испортила" - неясно. Либо это IE так ("Интернет испортила") называют в узких кругах, либо Microsoft Интернет испортила, когда создала IE.

                                                  Кстати, ещё порция боли. Русский язык достаточно часто поощряет не-грамотеев:
                                                  § 71. Деепричастия и деепричастные обороты не обособляются:
                                                  4) если деепричастие в составе определительной придаточной части имеет в качестве зависимого слова союзное слово который: Перед нами стоит задана, не решив которую мы не можем двигаться дальше.

                                                  http://orthographia.ru/punctum_uk.php?rid=196#pg196
                                                  Ну что за фигня, без запятой оно правильно, но хуже парсится.
                                                  Ответить
                                                  • Давай попробуем еще раз.
                                                    термины
                                                    MS IE - он же "майкрософт интернет испортил"
                                                    хз - хуй его знает
                                                    далее

                                                    вопрос гостя
                                                    >Функционал ЧЕГО не изменился?
                                                    ответ: "Интернет испортила" - (мы уже выяснили что это) точно.
                                                    Это утверждение что функционал ms IE не изменился.

                                                    Далее пояснение
                                                    "он всё также тормозит"
                                                    и художественное добавление под конец

                                                    "радостно сверкая панельками" хз откуда взявшимися.

                                                    Про панельки IE пояснять надо ?
                                                    Ответить
                                                    • > термины
                                                      > MS IE - он же "майкрософт интернет испортил"
                                                      Вот теперь всё предельно ясно, спасибо. Про панельки пояснять не надо.
                                                      Ответить
                                              • Ахтунг! Человек-парсер!
                                                Ответить
                                              • Я про "интернет испортила" сразу допер, но что вася- неграмотный ватный мудак было известно давным давно.
                                                Ответить
                                            • Что больше повлияло на твою способность ясно выражать мысли - PHP или сосание хуев?
                                              Ответить
                                          • > Почему линукс не взять?

                                            Потому что пидар скажет, что у него на Линуксе Крузис не запускается, а значит, спермобляди соснули.

                                            Конечному пользователю срать, что под капотом. Ему главное, чтобы его виндоговно везде запускалось.

                                            Если Electronic Arts свои творения портирует на Линукс и на Макось с помощью Wine, а не сразу пишет кроссплатформенный код, значит, это кому-нибудь нужно.
                                            Ответить
                                            • >Потому что пидар скажет, что у него на Линуксе Крузис не запускается
                                              Почему ты называешь пидаром 99% пользователей десктопа?
                                              Ответить
                                              • т.е. по твоему 99% пользователей десктопа тупорылые мартышки годные только на компост?
                                                Ответить
                                                • Нет, это люди которые хотят пользоваться а не ебаться. Ты машину починить умеешь? А телевизор? А, сука?
                                                  Ответить
                                                  • Есть слово такое потребляди. Ты знаешь смысл этого слова ?
                                                    Ответить
                                  • Ни в коем случае не настаивая на верности слухов, отмечу, что компилятора могло не быть только в слитом паке.
                                    Например, потому что доступ к тем кускам, которые требуют специализированного компилятора, автор слива не имел доступа. Будем играть в чайник?
                                    Ответить
                        • Исходники ReactOS есть зато
                          Ответить
                          • не-не, я их трогать не буду, это зашквар
                            Ответить
                  • Лучше целый браузер скомпилировать да писать под него CSS/JS, чтоб уж точно работало.
                    Ответить
                    • Для таких дебилов как ты, которые только js и умеют
                      Ответить
                • Кому нужно трудно поддерживаемое и не кроссплатформенное говно в браузерных приложениях?
                  Ответить
                  • Не кроссплатформенное? А жабаскриптовые JIT-ы прямо вот дофига кроссплатформенные, да?
                    Ответить
                    • Нахрена вам JIT во фронтэнде например? Зачем вообще тащить в браузер все это?
                      Ответить
                    • Прошу прощения, бомбит)
                      Ответить
                    • Вот сегодня случайно наткнулся:
                      https://en.wikipedia.org/wiki/Architecture_Neutral_Distribution_Format
                      была бы замечательная замена ж.скрипту и JITу.
                      Ответить
                  • Есть вполне реальная коммерческая необходимость.
                    С точки зрения коммерческого ПО, если есть возможность продавать продукт маленькими порциями, то продажи улучшаются. Например: бизнес-модель Адоби Клауд. Смысл в том, что купить Фотошоп, или не дай бог весь дизайнерский пакет стоит очень дорого. Один из способов решения: разбить на платежи, лизинг и т.д. т.е. покупается все-равно весь продукт, но оплата постепенная. Другой способ решения: разбить продукт на небольшие части, и продавать по частям. Далеко не всегда это возможно, но когда это возможно, предпринимателю это предпочтительнее.

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

                    Есть варианты програм, которые ХТМЛ может потянуть: типичное формошлепство с небольшой нагрузкой на оформление (статический ГУЙ). И есть варианты програм, которые не может: обработка звука и видео, например, или игры ААА уровня.

                    Ну и с точки зрения программиста не хочется работать с игрушечным языком.
                    Ответить
                    • > С точки зрения коммерческого ПО, если есть возможность продавать продукт маленькими порциями, то продажи улучшаются. Например: бизнес-модель Адоби Клауд. Смысл в том, что купить Фотошоп, или не дай бог весь дизайнерский пакет стоит очень дорого.
                      Напротив, часто оказывается выгодно продавать все скопом.
                      [color=blue]http://www.wasm.ru/article/100[/blue]
                      начиная с
                      Человек, приходя к Вам в магазин, очень обеспокоен количеством чего- либо. Когда он видит цену, он обеспокоен количеством его личных денег. Поэтому, если Вы будете продавать программу по частям. Он купит у Вас часть, причем наименьшую. Остальное будет пылиться у вас на полке. И вам придется уволить программистов, которые это писали.
                      Хотя вообще, весь текст довольно занятный
                      Ответить
            • Патамушта скриптовый
              Ответить
        • > Валидации опкодов
          Ладно в JVM можно доказать, что байткод не натворит лишнего. Но на x86 то как... Тут же даже указатель от числа не отличишь.
          Ответить
          • We use 80386 segments to constrain data references to a contiguous subrange of the virtual 32-bit address space. Ясно-понятно. Всё-таки одним статическим анализом не обошлось.

            P.S. Т.е. эти NaCl модули навсегда обречены жить в 32-битных процессах? В amd64 сегментация же не работает...
            Ответить
            • Ну есть еще PNaCl где вместо непосредственно машинного кода используется LLVM байткод с какими-то ограничениями. Там таких ограничений на 32-битность быть не должно
              Ответить
            • https://developer.chrome.com/native-client/reference/sandbox_internals/x86-64-sandbox вообще-то оно умеет в интель 64-бит
              Ответить
    • Хороший байтоёб с любого языка сдерёт абстракции и будет ебать байты.
      Ответить
      • Но признак гения - умение ебать байты прямо сквозь абстракции.
        Ответить
        • настоящие гении ебут железо на физическом уровне прямо через абстракции
          помнится, была очень красивая, но относительно бесполезная rowhammer атака на экме
          Ответить
        • "настоящие ассемблерщики умеют писать асм на любом языке" (с)

          мало народа нынче это понимает - все сразу думают про асм вставки. но в оригинале поговорка означала что ассемблерщики имеют привычку докалупыватся до самых интимных деталей языка программирования, и, пользуясь этим знанием, писать программы, которые хотя и выглядят заурядно, нормальные пользователи этого языка не понимают.
          Ответить
          • Заурядно но непонятно? Это как?
            Ответить
            • типа на перле (или даже пыхе) `eval eval $str`. или на С++ вызов метода по указателю который возвращает другой метод, который тоже вполне вероятно вызывается по указателю из контейнера. я сам не сильно мастер - я мало на чистом асме программировал. преимущественно только вставки в пасцаль или ц.
              Ответить
    • Добрый вечер в хату, пацаны
      Ответить

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