Куча говна / Говнокод #25312 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
Мне приснился очень странный сон, который отчасти был навеян дебатами между сторонниками и противниками ООП...
Во сне я видел паперть, на которой выступал лысый человек, похожий на Соловьева. Он очень волновался, ежеминутно протирая платком лицо и макушку.
Господа! - наконец объявил он. Сегодня исторический день! Мы выслушаем прения сторон, в лице мэтра ООП и адепта функционального стиля. 
Раздались бурные аплодисменты и на сцену вышли аллегорические фигуры. Мэтром ООП оказался сурового вида старик в пышной золотой мантии и 
венце, адепт функциональщины - сдержанный юноша, очень элегантно одетый.
Кроме них двоих, на паперть поднялся также и молодой человек в охотничьей шляпе, с куском оленьей шерсти вместо пера.
-Томаш Грыштар, представился он, и раскланялся. Он сильно картавил, но был безукоризненно вежлив, едва не падая с ног от услужливости.
Конферансье потёр руки. Итак господа, перейдём к делу. Сегодня мы поднимем со дна океана (шутка) на свет божий достоинства и недостатки обоих 
парадигм а поможет нам в этом наш друг Томас. Пусть в споре откроется истина.
-ООП не нужно, - бесцеремонно выпалил Адепт.
-О, это очень смелое заявление! -  засмеялся конферансье.
Мэтр густо покраснел, но не проронил ни слова.
-Что Вы на это скажете, сударь?
Мэтр сидел с каменным лицом. Конферансье, не дождавшись ответа, передал право слова Томасу:
-Полагаю, что наш друг-ассемблерщик тоже имеет право высказаться.
Тот достал из-за пазухи изящную золотую шкатулочку и, заведя ручку, открыл ее. Раздалась нежная мелодия.
Мэтр наконец прервал обет молчания:
-А что сталось с Вашим "Титаном"?
-Я... Э-э-э... Потерял исходники...
-Весьма прискорбно. Но  Вы сохранили компилятор?
-"Фасм", сударь.
-Господа, господа! Мы ведь собрались ради важного дела, а до сих пор ничего дельного не нашли.
-ООП нерационально использует память,  - адепт опять вмешался.
При этих словах Мэтр чуть покачнулся, раздался громкий скрип. Мантия его задралась - и всем стало ясно, что он сидит в инвалидном кресле.
Томас опять достал шкатулочку, очевидно, чтобы разрядить атмосферу.
-ООП учит плохому стилю. Адепт вынул розочку из петлицы и стал ее нюхать. Лицо у него было равнодушное.
Мэтр вздохнул, склонил голову, но ничего не ответил.
Томас опять достал шкатулочку.
Конферансье вытер пот со лба и заявил: -Господа, мне кажется, мы напрасно тратим время.
Шкатулочка вдруг ошиблась. Томас поднял ее над головой, потряс - и о ужас!- раздался громоподобный треск и в мгновение ока Томас был погребен 
под грудой шестеренок, пружин и коленчатых валов. Конферансье и Мэтр поспешили ему на помощь. Адепт сохранял невозмутимость, не пошевелив 
даже пальцем. 
-Дебаты окончены. Конферансье хлопнул в ладоши и сошёл со сцены. Было видно, что он глубоко уязвлен.
К адепту подошёл человек в сюртуке и похлопал его по плечу. Юноша ойкнул и недовольно обернулся.
Оказалось, что это полуидиот, очевидно, больной синдромом Дауна. Опекун вручил ему ниточки от красного и жёлтого воздушных шариков, 
отчего инфантильное лицо юноши озарилось радостью. Они медленно пошли по тропинке...
Томаш и Мэтр долго смотрели ему вслед.
-Как Вы думаете, коллега, уместны ли асмовставки в языке высокого уровня?
-Почему бы и нет?
-Я рад, что Вы так считаете.

...

Запостил: cmepmop cmepmop, (Updated )

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

  • унылое говнище какое

    как su.humor почитал за 1994 год
    Ответить
  • И кстати асмовставки в x64 запретили в VC
    Ответить
    • @И кстати асмовставки в x64 запретили в VC

      Не сразу понял глубинный смысл этой фразы. Остались ли после этого сомнения, что VC - говно? Когда-то мерилом приемистости языка было наличие асмовставок - майкрософт перешагнул даже через этот стереотип. Что будет дальше?
      Ответить
          • Компилятор сделает это за тебя. Если очень хочется -> масм
            Ответить
              • Достаточно хорошо, чтобы не пердолиться с непереносимым говном
                Ответить
                • Недостаточно хорошо, чтобы не создавать в багзилле GCC багов с меткой "missed-optimisation" (если начать дрючить эту вашу MSVC, то там тоже дохренища подобных оптимизационных багов повсплывает)
                  Ответить
            • > масм
              Ну нет, внешний асм ты сможешь дёргать только через jmp/call, т.е. придётся достаточно большой кусок писать на асме, конвеншн соблюдать и т.п.

              Так что у вставок всё-таки было теоретическое преимущество (как студия раскрывала их на практике см. примеры ниже по треду).
              Ответить
              • Функции, прилинкованные из другого объектного файла, кокококомпилятор принципиально не мог заинлайнить, а сишные функции с асмовставками мог?
                Ответить
          • стертор, мне иногда кажется что ты живешь в 1997м году.

            Ты пишешь на дельфи, и оптимизируешь код посредством асмовставок. Какую конкретно задачу ты решал что в ней асмовставка давала настолько серьезный прирост перформанса что стоила ебли?

            Брутфорсил пароли?
            Ответить
          • Решил попробовать переписать код с насма на фасм
            Выяснилось, что фасм 32-битный и на "WSL" не работает, впрочем это обходимо и не самое важное
            Но у фасма настолько все плохо, что даже нельзя папку с инклюдами задать, и в целом из опций компилятора есть только хуй, масло, их комбинации и хелп
            Ответить
          • скомпилируй fasm под ARM мне, если ты за кроссплатформенность
            Ответить
            • Я имел ввиду, что fasm могет собирать исполняемые файлы под разные оси, или вообще просто любой бинарный файл (как, например, под КолибриОС, сам осемблер они портировали, а вот форматтер не сделали и заголовки ручками или макросами собирают, ещё на формуме фасма я видал как им картинки генерили и пр., ещё я как-то хотел им мидюхи генерить, но так и не закончил:( ), сам-то fasm только на x86 работает. Вроде бы Томаш сейчас портирует его на x64. Есть кроссассемблер FASMARM: http://arm.flatassembler.net
              Ответить
              • > Я имел ввиду, что fasm могет собирать исполняемые файлы под разные оси

                И что? Сам fasm может запускаться только на x86-совместимом говне, т.к. написан на самом себе (нахрена?).

                > Вроде бы Томаш сейчас портирует его на x64

                Лучше б портировали на Си.

                > Есть кроссассемблер FASMARM: http://arm.flatassembler.net

                А для AVR? А для MIPS? GNU assembler это все умеет https://sourceware.org/binutils/docs/as/Machine-Dependencies.html
                Там даже RISC-V и MMIX(придуманная Дональдом Кнутом архитектура) есть. Поэтому я за GNU assembler
                Ответить
            • > под ARM
              Да это похуй, можно и с x86 кросс-конпелять. Другое дело - умеет ли он генерить код для чего-то кроме x86.
              Ответить
              • Вот тут ентузиасты компилируют им под разные платформы от 8080 до arm:
                ttp://board.flatassembler.net/forum.php?f=22
                Ответить
                • И нахрена? Наверняка такое же говно можно запилить в компилтайме на крестоговне через шаблоны и констэкспры, которыми продрачивается и парсится в компилтайме длиннющая строка с кодом на ассемблере и на основе этой хуйни делается куча опкодов и пишется в какой-нибудь std::string, но на кой хер это вообще делать, если можно с тем же успехом просто написать с нуля ассемблер?
                  Ответить
                    • const std::string asm_src = R"(
                          XOR RAX, RAX
                          MOV RBX, RCX
                      )"
                      
                      auto opcodes = compiletime_asm(asm_src);
                      
                      
                      std::ofstream ofs ("opcodes", std::ofstream::out);
                      ofs << opcodes;
                      ofs.close();
                      Ответить
                      • Можно ещё опкоды ебануть в массив в секции кода. А потом кастануть в функцию и вызвать.
                        Ответить
                        • Можно так реализовать асмовставки, если их нет. Только на каждую асмовставку будет вызов функции, что не есть хорошо.
                          Ответить
                      • Надо запилить компилтайм-работу с ФС, чтоб полностью на этапе компиляции опкоды генерировать и сразу в файл писать, и не нужно было даже запускать после компиляции для записи в файл. В процессе компиляции программа (точнее, компилирующий ее компилятор) может всякую пишушню выводить, типа варнингов и ошибок компиляции, но через варнинги и ошибки компиляции бинарные данные к сожалению не нагенерировать
                        Ответить
                        • Можно высрать код в отдельную секцию и вырезать её потом из бинаря. Немного неспортивно, конечно.
                          Ответить
                            • Оно никакой своей хуйни не добавит? Только байты из моих секций и ничего больше?
                              Ответить
                              • Ты питора абеля не читал штоль. В досовские времена использовали масм, он генерил ехешники, чтобы собрать ком делали ехешник с одной секцией и с базой 100h, а потом ехетобин ввдирал из него эту сексию.
                                Ответить
                                  • Я тоже, но питора абеля читал. Ещё в колледжэ у нас методичка что нам дали была по масму, хотя писали мы на тасме, но всем было похуй.
                                    Ответить
                                    • А у фасма, если ничего не путаю есть какой-то формат (-f bin вроде), который выводит голую секцию кода (ну типа как com-файл, но только для 32-битного кода). Т. е. даже exe2bin не нужен.
                                      Ответить
                                      • И формат и тип кода задаются в исходнике:
                                        format binary as "com" ; двоичный файл с расширением ".com"
                                        
                                        use16 ; осемблировать 16-битный код, если не ошибаюсь он установлен по умолчанию
                                        
                                        org 100h ; достаточно только этой директивы, по ней fasm сам "понимает" что это 16-битный ком
                                        Можно даже смешивать в одном файле разные типы кода.
                                        Ответить
                                • У меня, кстати в папке для всякого хлама всьо ещо лежит этот Абель. Мне сперва показалось, что это обычные тесктовые файлы с расширением DOC, но походу это надо в какой-то специальной программе читать:
                                  EБИТЫ И БАЙТЫ
                                            F------------------------------------------------------------
                                            
                                               Для  выполнения  программ  компьютер  временно записывает
                                            программу  и данные  в основную память.  Это память, которую
                                            люди имеют в виду, когда утверждают, что их компьютер имеет,
                                            например,  512К памяти. Компьютер имеет также ряд pегистров,
                                            которые он использует для временных вычислений.
                                               Минимальной  единицей  информации  в  компьютере является
                                            GбитH.  Бит  может быть  выключен,  так что  его значение есть
                                            нуль,   или  включен,  тогда  его  значение  равно  единице.
                                            Единственный бит не  может  представить  много  информации в
                                            отличие от группы битов.
                                               группа  из  девяти битов представляет собой  GбайтH; восемь
                                            битов которого содержат данные и один бит -  контроль на чет
                                            ность.
                                  Ответить
                                  • Возможно, это файл для программы «Лексикон». Файлы .lex были похожи на текстовые, но иногда в них встречались всякие символы невпопад, например цифра «2» перед каждым заголовком.
                                    Ответить
                                    • > файл для программы «Лексикон»
                                      Нет, пишут, что у лексикона эскейпом был 0xFF. А тут 0x1B.

                                      Нагуглил какие-то эскейпы для эпсоновских принтеров ESC/P. E - включить bold, F - выключить bold, G - включить подчёркивание, H - выключить подчёркивание. Вроде по смыслу подходит.
                                      Ответить
                                        • Я даже не знал про эти принтеры и их коды... У меня первым и последним принтером была HP'шная лазерка. До сих пор работает, кстати. Хотя ей больше 12 лет.
                                          Ответить
                                            • Да хуй знает, меня эти печатные протоколы никогда не интересовали... Но там USB, так что маловероятно, что из DOS'а с ним что-то получилось бы сделать.
                                              Ответить
                                              • "PCL" –— это тупо печатный протокол, как и "ESC/P".

                                                А вот "PostScript" —– это уже тьюринг-полный язык программирования с четырьмя стеками, похожий на "Forth".
                                                Ответить
                                              • Из голого DOS'а действительно к USB-принтеру обратиться почти нереально. А вот из VDM можно, если предварительно выполнить net use lpt1 (принтер должен быть расшарен как сетевой).
                                                Ответить
                                                • Из голого доса вполне можно обратиться к принтеру, если запрограммировать хост контроллер (ehci например)
                                                  Ответить
                                                  • Лень же, придётся контроллер изучать. А EHCI вроде бы программируется совсем не так, как OHCI и UHCI, так что код будет ещё и непортабельным...

                                                    Но да, теоретически возможно. Есть уже готовые драйвера для DOS для некоторых классов устройств (помню, что есть для mass storage и для мышек).
                                                    Ответить
                                                    • Они не такие уж и сложные, за пару вечеров можно накатать драйвер если не в продакшен...

                                                      Жопа в том, что тот же "ECHI" не умеет в медленные устройства и скидывает их "UHCI" или "OHCI". Поэтому тебе придётся писать сразу джва драйвера.

                                                      Только "xHCI" умеет все скорости одновременно. Именно поэтому я за "xHCI".
                                                      Ответить
                                                        • З.Ы. Хотя, наверное, можно забить на EHCI и юзать только UHCI. Медленно, зато всего один драйвер.
                                                          Ответить
                                                        • З.Ы. Но встречаются и материнки где только ECCHI с rate-matching хабом.

                                                          Так что если пилить не только падсибя, то нужны все 4 драйвера + поддержка хабов.
                                                          Ответить
                                                          • Кстати, помнишь срач про сёму а ahci?

                                                            Я тут вспомнил что винда могла внезапно переключить ATA в режим PIO, даже очень хороший UltraDMA.

                                                            Причины не очень ясны, но народ там это отключал через реестр.
                                                            нагуглил даже:
                                                            http://www.it-simple.ru/?p=6123

                                                            Надо бы ему предложить позырить в диспечтер устройств, вдруг там pio?

                                                            Сам я в жизни видел только переключение в PIO от 40ка жильного кабеля, но у него же sata
                                                            Ответить
                                                            • Не внезапно, а после нескольких ошибок. Было у меня на сбойном винте. Еле нагуглил причину.
                                                              Ответить
                                                              • Значит, после нескольких ошибок Windows делает вывод, что канал связи с винчестером не тянет такой поток данных (помехи в шлейфе?) и поэтому переходит на более низкую скорость?
                                                                Ответить
                                              • USB это всего лишь порт. Протокол от него не зависит.

                                                Какой именно способ описаяния страницы там идет: PCL, PostScript или вообще аски текст с ESC последовательносями Epson -- это всё не важно.

                                                Бывают даже принтеры которые умеют XPS и битмапы GDI (винпринтеры).

                                                Читни документца, в общем
                                                [quote]
                                                This specification does not define Page Description Languages (PDL) or Printer Control Protocols (PCP).
                                                This specification defines interfaces that are intended to support existing PDLs and PCPs.
                                                [/qute]
                                                https://www.usb.org/sites/default/files/usbprint11a021811.pdf
                                                Ответить
                                  • > группа из девяти битов представляет собой байт

                                    что, простите?
                                    Ответить
                                    • Ещё до того, как придумали оперативку с ECC, была девятибитная оперативка. Девятый бит не был доступен пользователю, он автоматически контроллером выставлялся так, чтобы сумма битов была чётной. Если вдруг в какой-то момент сумма битов оказывалась нечётной, контроллер принимал решение, что был скачок напряжения или память неисправна, и вешал комп намертво.

                                      Но девятибитная оперативка использовалась не везде.
                                      Ответить
                                      • > девятибитная оперативк
                                        В циклоняшке тоже девятибитная. Как и умножители.
                                        Ответить
                                        • Питер Нортон в своё время ещё ругался на такую оперативку. Он считал, что нельзя считать зашкваренной всю память только из-за того, что одна ячейка зашкварилась.
                                          Ответить
                                          • > ругался на такую оперативку
                                            В циклоняшке не обязательно юзать этот бит под ECC. Можно просто как девятый бит.
                                            Ответить
                    • Кстати, а ведь "PHP" неплохо подходит для написания ассемблеров. И даже очередную макрохуету изобретать не надо.
                      Ответить
                      • Нет, fasm и fasmg для этого лучше подходят, с ними получается вполне обычный ассемблерный синтаксис, обычные мокросы, обычные метки, обычные символьные константы, обычные директивы типа label, local, extern и прочие org'ии, для них нужно только мнемоник намакроёбить, а все эти db,dw,dd,rb,rw,rd,file и т.д., уже есть и от целевой рахитектуры не зависят.
                        Ответить
          • Кстати, есть совместимый с MASM ассемблер, который работает не только на винде, да и под какой-нибудь ARM его тоже собрать можно попробовать, раз он на Си написан: https://jwasm.github.io/
            Ответить
      • Кстати в покойном итанике асмовставки сразу были запрещены, ибо кококококмпилятор тупо не мог в такое.
        Ответить
          • Умела. И видимая, и интеловский кококомпилер. Причём это у icl в доке было указано, шта ассемблер и Ц в одном исходнике недопустимы.
            Ответить
            • В исходнике программы на S" Forth" допустимо всё на что хватит фантазии автора. Именно поэтому я за S" Forth".
              Ответить
    • Да и похуй, если честно. Студийные вставки всегда выглядели как инородное говно если посмотреть на дизасм. Это ж не gcc, который умеет очень аккуратно вшивать вставки в код.
      Ответить
      • >Сможешь найти вставку среди остального кода?


        mov     ecx, DWORD PTR [esp+4] <-- аргумент (n) сюда пошел
                test    ecx, ecx <--если 0 -- сразу..
                jle     .L4 <--...нахуй
                xor     edx, edx <--обнуляем
                mov     eax, 1 <--Ложим в возвращаемое значение 1 (по калконвенции) (в коде это tmp)
        .L3: <--цыкол начался
                mul eax <-- вот твоя вставка
                add     edx, 1 <--увеличили счетчик цикло
                cmp     ecx, edx <-- сравнили с аргументом (n)
                jne     .L3   <--мало? пошли снова 
                ret <--иначе всё. В возвращаемом значении (eax), напомню, tmp.
        .L4:
                mov     eax, 1 <--нахуй -- это сюда. Ложим в возвращаемое значение 1 (по калконвенции)
                ret <--все


        На уровне уроков информатики-то я асемблер знаю
        Ответить
        • Ну я же не о том, что её нет. А о том, что она не выглядит как кусок уёбищного инородного говна посреди дизасма. gcc её аккуратно интегрировал в свой код.

          З.Ы. Лол, ты первую версию успел открыть. Я там таб забыл въебать, так что вставка палилась и без знания асма 🙂
          Ответить
          • а еще она палилась по наличию инструкции mul, которая больше нигде не встречается

            надо было туда add какой-нить забабахать
            Ответить
            • Кстати, с асмовставками в gcc есть забавный хак, позволяющий конпелировать 16-битный код.
              Ответить
              • а запускать его как?:)

                юниксы с гццой разве умеют в памяти сегмент с 16ти битным кодом?
                Ответить
                • Ступайте со своими плюсовыми спорами в другие треды. В моём не спамьте.
                  Ответить
                  • Тред про ассемблерные вставки. Мы обсуждаем ассемблерные вставки. Что не так?
                    Ответить
                • А зачем это запускать в юниксе? Это скорее для каких-нибудь загрузчиков...

                  Да и 16-битный код там не совсем настоящий. Он юзает 32-битные регистры и 32-битную адресацию. Просто все инструкции обмазаны префиксами.
                  Ответить
                  • точно, груб какой-нить же или лило.

                    Кстати, современный бутпротокол вроде такой что загрузчик должен переключиться в 32битный, а раньше вроде не должен был, не?

                    А что в коде 16ти битного? инструкции?
                    Ответить
                    • Насколько я помню, у ядра линупса, если оно не косит под UEFI бинарник, до сих пор четыре точки входа - 16, 32 и 64 + ещё одна 16 для прямого старта с дискетки/флешки. Загрузчик может юзать любую из них, какая ему удобней.

                      > А что в коде 16ти битного
                      Его можно запустить в реалмоде (не на труъ 16-битном проце, само собой).
                      Ответить
                      • З.Ы. Лол, перечитал бутпротокол, их там шесть:
                        - 16 как бутсектор, 16 для загрузчика
                        - 32 обычная, 32 для UEFI
                        - 64 обычная, 64 для UEFI
                        Ответить
                        • жэсточайше конечно:)

                          Кстати, когда грузишься в 16битном режиме то можно попросить ядро перечислить все видеорежимы для виртуальной консоли с фреймбуфером (vga=ask)

                          а в 32х битном -- хуй. Это потому что vga=ask через vesa bios работа?
                          Ответить
                          • Ну да, там 16-битная точка входа как раз видеорежим ставит через bios. И карту памяти собирает. Больше она вроде ничего интересного и не делает.
                            Ответить
                            • што е карта памяти?Структура в памяти со знанием о том, по какому адресу загружено ядро и всякие другие адреса?
                              Ответить
                                • который по Int15h-то?

                                  это такие циферки которые репортуют обычно ядра большинства юниксподобных осей, если там явно не отключить этот вывод (quiet там какой-нито) и пугают нубов страшно

                                  хуй@хуй:~$ sudo dmesg | grep 820
                                  Password:
                                  [    0.000000] e820: BIOS-provided physical RAM map:
                                  [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
                                  [    0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
                                  [    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
                                  [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000dffeffff] usable
                                  [    0.000000] BIOS-e820: [mem 0x00000000dfff0000-0x00000000dfffffff] ACPI data
                                  [    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
                                  [    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
                                  [    0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
                                  [    0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000004295fffff] usable
                                  [    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
                                  [    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
                                  [    0.000000] e820: last_pfn = 0x429600 max_arch_pfn = 0x400000000
                                  [    0.000000] e820: last_pfn = 0xdfff0 max_arch_pfn = 0x400000000
                                  [    0.000000] e820: [mem 0xe0000000-0xfebfffff] available for PCI devices
                                  [    0.251789] raid6: sse2x1   xor()  7820 MB/s
                                  [    0.607072] e820: reserve RAM buffer [mem 0x0009fc00-0x0009ffff]
                                  [    0.607078] e820: reserve RAM buffer [mem 0xdfff0000-0xdfffffff]
                                  [    0.607079] e820: reserve RAM buffer [mem 0x429600000-0x42bffffff]
                                  Ответить
                    • Так, я походу недооценил фантазию Линуса. Там даже с закосом под UEFI посреди PE'шных хедеров в конце первого сектора видно знакомое 55 AA...
                      Ответить
                      • Т.е. у UEFI'шной сборки ядра точек входа восемь - 6 описанных выше и ещё пара от MZ и от PE. Вот это кентавр!
                        Ответить
                        • Жаль, что ELF или a.out с PE не склеить. Да и даже у UEFI и винды разные подсистемы 🙁
                          Ответить
                            • у .net приложения же обычное win32 которое импортирует mscoree, или я тебя не понял?
                              Ответить
                              • Пишут, что начиная с XP эта нативная заглушка там только для красоты.
                                Ответить
                                • любопытно: на win7@64 открыл powershell_ise в depends.exe и в ImpEx@Far.

                                  И там и сям нет ни одного импорта!

                                  Открыл 32х битную версию (в syswow64) и там импортят mscorsee а уже он импортит все остальное

                                  Выходит что загрузчик винды понимает .netовый хедер у 64битного PE и не требует костыля

                                  Все это так странно...

                                  Вероятно про это пишет Рихтер или Руссинович, но я их читал в до64хбитные времена(
                                  Ответить
                                • продолжаем эксперемент
                                  dumpbin от студии -- лучший друг виндоёба

                                  x86
                                  Dump of file C:\Windows\SysWow64\WindowsPowerShell\v1.0\powershell_ise.exe
                                  
                                  File Type: EXECUTABLE IMAGE
                                  
                                    Section contains the following imports:
                                  
                                      mscoree.dll
                                                  402000 Import Address Table
                                                  4135DE Import Name Table
                                                       0 time date stamp
                                                       0 Index of first forwarder reference
                                  
                                                      0 _CorExeMain


                                  импорт есть

                                  x64
                                  c:\>dumpbin /IMPORTS C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.e
                                  xe
                                  Microsoft (R) COFF/PE Dumper Version 14.00.24215.1
                                  Copyright (C) Microsoft Corporation.  All rights reserved.
                                  
                                  
                                  Dump of file C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe
                                  
                                  File Type: EXECUTABLE IMAGE
                                  
                                    Summary
                                  
                                         24000 .rsrc
                                         12000 .text


                                  импорт нет

                                  при этом в хедерах у x64 ни слова про .nET

                                  Есть правда /CLRHEADER (у всех есть).

                                  Как лоадер понимает? Неужто читает этот Header?
                                  Ответить
                                  • > как понимает
                                    В data directory есть слот под CLR заголовок, проверь.
                                    Ответить
                                    • Тогда почему в 32 это не юзать?

                                      Или это костыль чотбы работать на машинах типа win98, где вообще нет знания про .net?
                                      Ответить
                                      • Походу костыль. Ну и в mixed сборках даже в 64 должен быть нативный код...

                                        Кстати, попробуй собрать простую прогу на c#. А то вдруг тебе просто такие бинари попались.
                                        Ответить
                                        • собрал чисто managed сборку. В 32битном режиме импорт есть
                                          в 64битном -- нет
                                          Менял через build -> platform target.

                                          Ну вероятно заголовок для x64 и ABI придумывали когда уже знали про .net

                                          Ну а когда .net только изобрели, невозможно же было пропатчить все старые ОСы, вот и сделали костыль
                                          Ответить
                            • у .net приложения же обычное win32 которое импортирует mscoree, или я тебя не понял?
                              Ответить
                        • Кстати, о кентаврах. Я вспомнил EMX — порт gcc на OS/2 и DPMI. Там линкер умудрялся к a.out-файлу прилеплять заголовки LX и MZ, причём не a.out был внутри LX, а LX был внутри a.out, но при этом результирующий файл был валидным и с точки зрения MZ, и с точки зрения LX.

                          Был аналогичный проект RSX, в котором вместо a.out и LX использовались COFF и PE соответственно (но тут проще, потому что PE в себе содержит диалект COFF).

                          Были кентавры и попроще: MZ и досовский драйвер устройства в одном.

                          А ещё были вирусы Esperanto и Winux...
                          Ответить
                          • > MZ и досовский драйвер устройства в одном.
                            который можно через DEVICE (или load?) в config.sys загрузить?

                            я в детстве писал .exe который загружался в память или делал terminate stay resident (и вешался на прерывание), могу ли я считать что совместил MikeZbikovski и драйвер)?
                            Ответить
                            • Были именно гибриды, которые можно было в и config.sys загрузить через DEVICE, и из командной строки выполнить как EXE-файл.

                              Трюк был основан на том, что заголовки DEVICE начинались не с самого начала, поэтому не портили заголовок MZ.
                              Ответить
                          • Настоящий Кентавр это ядро XNU.
                            Там внутри Mach, сверху BSD
                            Ответить
                          • А как они a.out и MZ слепили? Там же меджики в первых байтах конфликтуют.
                            Ответить
                            • a.out начинается не с нулевого смещения, а идёт где-то после заголовков MZ. Т. е. линкеры его как чистый a.out не воспримут.

                              Погуглил, «RSX» тоже основан на a.out, и в нём тоже a.out начинается где-то в середине файла. Я перепутал: в «EMX» сигнатура a.out идёт после LX, а в «RSX» сигнатура a.out идёт до PE.

                              Офтопик: а ведь дебиановские пакеты представляют собой архив «AR», такой же как у библиотек кокококомпиляторов с расширением «.a». Можно собрать архив, кокококоторый можно скармливать и линкеру, и «dpkg»?
                              Ответить
                  • >> Просто все инструкции обмазаны префиксами.

                    Встроенный ассемблер «Трубопаскакаля» не понимал инструкций, которых нет в 8086. Поэтому чтобы использовать 32-битные данные или 32-битные смещения (из 16-битного кода), приходилось лепить DB 66H или DB 67H соответственно и инструкцию для 16-битных данных/смещений. Прикол заключался в том, что некоторые регистры для 16-битного режима и для 32-битного режима закодированы по-разному (а одно из значений байта mod R/M ещё и требует за собой байт s-i-b, что вообще ужас). Поэтому получалась криптушня:
                    db 66h; db 67h; mov ax, [bp + si] {интерпретируется как mov eax, [edx]}

                    Что eax соответствует ax, нетрудно догадаться. Но как догадаться, что [bp + si] соответствует [edx]?
                    Ответить
                    • > криптушня
                      Я бы тупо через db наебашил и коммент добавил. Ибо этот пиздец всё равно не читается.
                      Ответить
                      • А вообще сложно выучить что ли?
                        [BX+SI] с префиксом 67H –— это [EAX].
                        [BX+DI] с префиксом 67H –— это [ECX].
                        [BP+SI] с префиксом 67H –— это [EDX].
                        [BP+DI] с префиксом 67H –— это [EBX].
                        [DI+константа] с префиксом 67H –— это [EBP+константа].
                        [BP+константа] с префиксом 67H –— это [ESI+константа].
                        [BX] с префиксом 67H –— это [EDI].

                        Нужно запомнить, что [SI] с префиксом 67H превратится в тыкву; что [константа] превратится в [ESI], а сама эта константа исполнится как опкод; а также что [DI] без смещения наоборот потребует константу и превратится в [константа].

                        А префикс 66H можно вообще использовать без проблем, только для immediate-констант придётся добавлять два байта через DB/DW.

                        -----

                        В «PDP-11» такой фигни не было, именно поэтому я за «PDP-11».
                        Ответить
      • И это при том, что для gcc асмовставка - тупо кусок текста, который он копипастит не читая. Даже \t и \n приходится руками втыкать.

        А студия реально понимала написанное, как минимум затронутые командами регистры могла определять... Видимо из-за этой сложной реализации они и забили на amd64.
        Ответить
      • Понял, в чём дело. Встроенный ассемблер «gcc» (и «clang») использует макроподстановки: он может поменять регистры, чтобы избежать лишних мувов. Другие же кококомпиляторы со встроенным ассемблером («MSVC», «Borland», «Digital Mars», «Watcom», «Intel») вставляют твой асмокод как есть. Ты им даже не можешь сообщить, какие регистры используешь.

        Короче, прыщебляди соснули, как обычно.
        Ответить
        • Прыщебляди соснули в удобстве (надо расписывать регистры вручную) но выиграли в качестве.
          Ответить
          • А какие ещё компиляторы бывают с асмовставками (я сейчас про произвольные ЯП)?
            Ответить
              • Возможно ещё и SwiftForth и SwiftX, они вроде реализуют стандарт ANS'94, значит как минимум слова CODE ;CODE и END-CODE должны быть. Тем более SwiftX для ембедед разработки.
                Ответить
          • а как дела у шланга?

            соснули-ли бздубляди и макоёбы?
            Ответить
              • Перефразирую

                Поддерживает-ли асм всавки компилятор clang для llvm?

                Его используют BSD: как обычные, так и DarwinBSD (на которой построены iOS и Mac OS X).
                Ответить
                • Проверь:
                  http://clang.llvm.org/compatibility.html#inline-asm

                  Он один-в-один скопирован с «gcc», только проверка размеров аргументов более строгая. Ну то есть «add $4, (%rax)» писа́ть нельзя, нужно явно указать, что ты хочешь скопировать: байт, слово, двойное слово, четверное слово...

                  Ассемблер интегрированный, а не «gas».
                  Ответить
                  • а вставки из CLRнутых или JVMнутых опаопаопапакодов?
                    Ответить
                      • страшно подумать во что они превращаются в ЦПУ где нету векторов
                        Ответить
                  • Это всё равно, что играть на рояле пальцами куклы-марионетки.
                    Ответить
                    • ой, да ты хоть помолчи
                      ни вообще нихуя не знаешь, только гомосятину свою равзодить можешь
                      Ответить
                        • говноед, пускай тебе три камеринца прямую кишку порвут и чтоб ты от заражения крови загнулся
                          Ответить
                          • Вероятно, тебе будет интересно, что первым парнем, чьей спермы я отведал, был мой двоюродный брат; он незаконнорожденный, так что всё ок. Ему было 14, мне - 20. Изрядно насмотревшись порнухи, мне захотелось мужской близости, а он был в зоне досягаемости. Я буквально не давал ему проходу, постоянно лапал и склонял к близости. Я отсосал ему, когда он спал. Он проснулся, но сделал вид, что спит. Маленький пидорок.
                            Ответить
                            • доктор, в одной из статей Вы указали, что у подростков горькая на вкус сперма. То есть, знание и в самом деле было подкреплено опытом?
                              Ответить
                                • статья есть в уголовном кодексе за совращение малолетних
                                  и за пропаганду гомосексуализма

                                  за эти две статьи тебя и посадят, говно
                                  Ответить
                          • Скажу по-секрету, пидоры окружают тебя. Ты каждый день здороваешься с ними за руку, общаешься и пьешь с ними пиво. И чем сильнее твоя неприязнь к ним, тем меньше твои шансы понять, кто есть кто.

                            надеюсь, после моих слов ты крепко задумаешься.
                            Ответить
                            • у меня нет неприязни к геям

                              только к пидарам гнойным вроде тебя
                              Ответить
                              • не бывает "не гнойных" пидоров. Ты ещё и жертва стереотипов...
                                Ответить
                                  • мне очень нравится, что некоторых людэй можно довести до каления парочкой предложений; какой резонанс, прости, господи!.. Особенно хорошо, что среди них - ты. Кстати, в "эффект бабочки" веришь?
                                    Ответить
                                    • Иди под струю, мойся, блядь! Начальник, бля! Начальник! Этот пидорас обосрался, блядь! Начальник! Иди под струю, блядь, чтоб сейчас пришли — ты чистый был, нахуй! Ты понял, бляяя?! Чтобы чистый был, сука! Обосрался, пидорас, а! Начальник, блядь, он обосрался! Идите мойте его, нахуй, я с ним здесь сидеть не буду, блядь!
                                      Ответить
                                          • Дождавшись прибытия союзников, Филипп двинулся маршем в Беотию с 30 тысячами пехоты и более 2 тысяч конницы. Обе стороны рвались в бой, но Филипп имел больше солдат и лучших полководцев. На одном фланге он поставил командовать сына Александра и с ним лучших военачальников, а другой фланг возглавил сам, подразделения расставил по месту. У противника один фланг состоял из афинян, другой из беотийцев. Упорное сражение длилось долгое время без перевеса какой-либо стороны, многие погибли и надежда на победу воодушевляла обе стороны. Александр первым прорубился через строй врагов, повергнув многих. Такой же успех сопутствовал его товарищам, так что в сплошном фронте неприятеля зазияли бреши. Пришлось еще нагромоздить горы трупов, прежде чем Александр принудил неприятеля к бегству. Царь со своей стороны вначале затеял рискованное отступление, затем надавил на противника и заставил его побежать. Более тысячи афинян пали в сражении, не менее 2-х тысяч захвачено в плен. Также много погибло беотийцев, и немало их попало в плен
                                            Ответить
                                            • В целом, не кажется особенно своеобразным и способ его формирования (из любовных пар, давших присягу верности над могилой Иолая, возницы и друга Геракла). Гомосексуальные связи были частью традиции аристократических мужских сообществ и институционализированы во многих дорийских и эолийских (но не ионийских) государствах (Крит, Спарта). Афиней в «Пире мудрецов» (кн. 13) говорит:

                                              «Так спартанцы осуществляют жертвоподношения богу Эросу перед воинами, выстроенными для боя, потому как полагают, что их спасение и победа зависят от дружбы между мужчинами, стоящими в строю… И опять, так называемый Священный отряд в Фивах состоит из любовников и их избранников, проявляя таким образом величие бога Эроса в том, что бойцы отряда избрали погибель со славой перед невзрачной мизерной жизнью.»[1]
                                              Ответить
                                              • О том, что в Беотии гомосексуальные связи свободных мужчин практиковались открыто, свидетельствуют многие античные авторы, например, Платон в «Пире»[2]; Элиан отмечает, что со времён мифического царя Лая «привязанность к красавцам фиванцы стали считать благом»[3]. О том, что в Фивах мужчины имеют обычай ставить своих любовников рядом с собой в бою, упоминает и Сократ в «Пире» Ксенофонта. С другой стороны, мысль о том, что армия, составленная из любовников, была бы непобедима, поскольку возлюбленный устыдится струсить на глазах любящего, а любящий предпочтёт смерть оставлению возлюбленного на произвол судьбы — высказывается Федром в «Пире» Платона и, следовательно, не была чем-то необычным для IV в. до н. э. даже в более строгих к гомосексуальным связям Афинах.
                                                Ответить
                                                • ак, например, тот раненый воин, который, видя, что враг готов его добить, молил: „Рази в грудь, чтобы моему возлюбленному не пришлось краснеть, видя меня убитым ударом в спину“. Говорят, что Иолай, возлюбленный Геракла, помогал ему в трудах и битвах. Аристотель сообщает, что даже в его время влюблённые перед могилой Иолая приносили друг другу клятву в верности. Вполне возможно, что отряд получил наименование „священного“ по той же причине, по какой Платон зовёт любовника „боговдохновенным другом“.»
                                                  Ответить
                                                  • Существует рассказ, что вплоть до битвы при Херонее он (отряд) оставался непобедимым; когда же после битвы Филипп, осматривая трупы, оказался на том месте, где в полном вооружении, грудью встретив удары македонских копий, лежали все триста мужей, и на его вопрос ему ответили, что это отряд любовников и возлюбленных, он заплакал и промолвил: «Да погибнут злою смертью подозревающие их в том, что они были виновниками или соучастниками чего бы то ни было позорного».
                                                    Ответить
  • унылое говнище какое

    как su.humor почитал за 1994 год
    Ответить
  • унылое говнище какое

    как su.humor почитал за 1994 год
    Ответить
      • Я не знаю что такое "Симпсоны". Чтобы программировать на "PHP" никакие "Симпосны" не нужны. Я просто смотру "Теклепузики" и теку.
        Ответить
          • За холмами, за лесами
            Тонет лодка с мусорами.
            Мусора кричат: «спасите!»
            А телепузики им: «пузи-хуй сосите!»
            Ответить
            • Шум и гам в этом логове жутком,
              Но всю ночь напролёт до зари
              Я читаю стихи пузи-губке
              И с Тинки-Винки жарю пузи-пироги.
              Ответить
              • Всё! Пиздец! Решено! Без возврата
                Я покинул родные поля.
                Уж не будут листвой крылатой
                Надо мной пузи-тополя.

                Пылесос мой давно скукожился,
                Пузи-тостер давно издох.
                На телепузиковых изогнутых улицах
                Умереть, знать, сулил мне Бог.
                Ответить
        • Мои друзья смотрят «Футы-Раму» и каких-то «Гриффиндоров». Дураки, что с них взять. Лучше я «Улицу Салям» ещё раз пересмотрю.
          Ответить
          • А я лижу на деване и смотрю "Котлопёз", "Вовка Гоп, квадранты и шары", "Эй, Арахнольд!" все одновремена. Под моим носам надуваеса огромный пузырь из саплей, он лопается и сопли стикают в пачку с чипсами на моём жырнам пузи, потом я рукой, которой только что ковырял в жопи, беру горсть чипсав и набиваю сибе полный рот. В моей комнате стоит жуткий смрад из-за разлагающегося трупа соседа, который джва месица нозат паскальзнулся в луже слюней рядом со мной и разбил голову об череп моего отса, а мне лень всьо это уберать.
            Ответить
            • Иди под струю, мойся, блядь! Начальник, бля! Начальник! Этот пидорас обосрался, блядь! Начальник! Иди под струю, блядь, чтоб сейчас пришли — ты чистый был, нахуй! Ты понял, бляяя?! Чтобы чистый был, сука! Обосрался, пидорас, а! Начальник, блядь, он обосрался! Идите мойте его, нахуй, я с ним здесь сидеть не буду, блядь!
              Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8