1. Assembler / Говнокод #24386

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    global _start
    _start:
     mov ebx,0
     mov eax,1
     int 0x80

    https://habr.com/company/flant/blog/413959/

    Объясните для тупых, как программа в 3 команды может занимать аж 352 байта?
    Помню были приколы, когда в блокноте или пейнте писали бинарники.

    Запостил: guestinxo, 15 Июня 2018

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

    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • > Аналога досовского com-файла,
        Археологи говорят, что COM пришли в DOS из CP/M. Хотя можно напейсать свой загрузчик и юзать нешто подобное в других осях.
        Ответить
      • > разделять код и данные,
        На винде раньше можно было одну секцию для кода и для всего остального.
        Ответить
        • Да и сейчас можно по-любому.
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • Кто мешает одну RWX секцию юзать под всё?
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Самомодифицирующийся (бля, какое длинное слово) код можно писать и в секции, которую запрещено исполнять, если юзать косвенный шитый код. Программа состоит из только адресов подпрограм, её интерпретирует адресный интерпретатор. Низкоуровневые подпрограммы и сам адресный интерпретатор не модификаются, а шитый код можно спокойно менять.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                • Можно, но тогда ты сможешь юзать только те инструкции, которые есть в этих подпрограммах (ну либо надёргать подходящих кусков из соседних библиотек).
                  Ответить
                  • Ещё же можно в стек адреса напихать (кстати, roskomgovno где-то упоминал return oriented programmimg).

                    ЗЫ. придумал упоротую хуйню – форт-система с прямым шитым кодом, но без адресного интерпретатора, счетчик инструкций – esp, next – ret, но тогда нельзя будет юзать push и оба стека придётся реализовывать программно.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Как я себе это предстпвляю:
                        ; esp -- счётчик инструкцей аддресного интерплетатора
                        ; esi -- вершина стека развратов
                        ; edi -- вершина стека данныэ
                        
                        next equ ret
                        
                        macro dpop [arg] {
                            mov arg, [edi]
                            lea edi, [edi + 4]
                        }
                        
                        macro dpush [arg] {
                            lea edi, [edi - 4]
                            mov [edi], arg
                        }
                        
                        macro rpop [arg] {
                            mov arg, [esi]
                            lea esi, [esi + 4]
                        }
                        
                        macro rpush [arg] {
                            lea esi, [esi - 4]
                            mov [esi], arg
                        }
                        
                        macro exit {
                            rpop esp
                            next
                        }
                        
                        execute:
                            rpush esp
                            dpop esp
                            next
                        Ответить
            • показать все, что скрытоvanished
              Ответить
          • показать все, что скрытоvanished
            Ответить
            • Не особо удобно, кмк. Придётся или код релочить (в нём же все адреса этих констант на .text будут указывать) или постоянно таскать с собой указатель на скопированный блок (причём сохранить его некуда).

              Это ж не микроконтроллер с фиксированными адресами.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну вот дальше придётся этот x_current пропихивать во все функции, которым он нужен. Т.е. это всё-таки не глобалка.

                  Лучше уж тогда вообще глобалки не юзать, имхо. И не пытаться их сэмулировать.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • > придётся этот x_current пропихивать во все функции
                    То ли дело ассамблей, там есть встроенные глобальные переменные (регистры):
                    lea eax, [esp+a] ; загрузили адрес переменной
                    call sub1
                    ; ...
                    
                    sub1:
                        ; [eax] - адрес переменной, можно юзать
                    Ответить
            • Кстати, если в fasm не указать секцию он создат одну секцию .flat для всего.
              Ответить
            • Зачем так сложноу ?
              Лить константы прямо в секцию кода, неподалёку от места их применения, добавляя прямо над ней прыжок на размер константы ( аля jmp short какой-нибудь ).
              Помнится, какие-то асм-компиляторы прямо так и делали( в этом случае, адреса констант проставлялись фиксированные ), либо же, чутка хитрее( шортопитухи и вычисление адреса константы относительно запрашивающей константу инструкции ).
              В последнем случае, при норм компоновке, получаемый код можно норм внедрять и в другие проги
              Ответить
      • @чтобы разделять код и данные, как того требует защищённый режим.

        А знаешь ли ты, что во многих виндах был баг, благодаря которому становилось возможным выполнение произвольного кода? Баг заключался в функции LoadLibraryEx. При подгрузке библиотеки *.dll с точкой входа, управление сразу же передавалось на нее, не спасал даже флаг LOAD_LIBRARY_AS_DATAFILE.
        Ответить
    • Заголовки, выравнивание, символы и т.п.

      З.Ы. Если скомпилить в a.out, как советует guest, и стрипнуть символы, то получится всего 44 байта (из которых 12 -- твой код, а 32 -- заголовки).
      Ответить
      • Стандарты исполняемых файлов на пути оптимизации размера?
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Меня жутко бесит что в современные PC не встроен интерпретатор BASIC.
            Мало того что это напрямую нарушает принцип обратной совместимости, так еще и некоторые firmware врут, сообщая в BDA (или каких-то таких структурах) что он есть
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Вот примерно с 386 все и катится в сраное говно
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Умели, да. И писать умели для tiny mode когда вся программа в одном сегменте, и документацию читать умели оффлайновую, и кодить в текстовых редакторах даже без лексера, и стековерфлоу не было, и член сто мороженое было вкусным
                    Ответить
            • >Меня жутко бесит что в современные PC не встроен

              А меня жутко бесит что в современные PC встраивают какую-то малопонятную вредную дичь под названием UEFI.
              Действительно уж лучше бы встроили какой-нибудь бейсик и примитивную ОСь.
              Ответить
              • Да ну, UEFI Shell очень даже няшный. Там изкоробки можно писать скриптушню, которая лезет напрямую к железу и даже хекс-редактор есть, который может править оперативку и диск. Что ещё надо для счастья?

                З.Ы. Обидно, что этот шелл почти никогда не встраивают в прошивку.
                Ответить
              • > вредную дичь
                Что там вредного то?

                64-битный код с маппингом адресного пространства 1:1. Интерфейсики с разными уровнями абстракции вместо изъёбств с гейтами через риалмод. USB работает из коробки. Драйвера достаточно легко писать. Юникод во все поля. Чем не примитивная ось?
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                • А лруг ктогибудь поломает энтим вашем шелом мою венду?
                  Ответить
                • > Что там вредного то?

                  Ограничение на установку неподписанных вендором ОСей.

                  А UEFI remote mangement — потенциальная гипердыра, похуже мелтдаун и спектрум.

                  Технология, с помощью которой ПО СЕТИ можно выключать/перезагружать/ломать комп, менять настройки биоса. И я практически уверен что вендорами там оставлен бэкдор.
                  Ответить
                  • >>UEFI remote mangement — потенциальная гипердыра

                    а с другой стороны кому-то это может помочь не ехать в три часа ночи в датацентр:)
                    Ответить
                    • А персонала в дата-центре выходит нет?

                      Ну специально обученный дежурный.

                      Это как раз специально делают какую-то хуйню, а потом "объясняют" почему эта хуйня вам ну очень нужна.

                      Наше устройство не следит за вами, просто удобно хранить на нашем сервере историю ваших местоположений.

                      Айфон не собирает базу отпечатков пальцев, это для вашей же безопасности, итд.
                      Ответить
                      • Да есть конечно, но иногда нужны более квалифицированные чуваки.

                        А еще иногда бывают бедные конторки где яумамыадмин держит сервера прямо под столом на рабочем месте или в импровизированной серверной в углу.

                        И там любой out of band management может спасти ситуацию. Хотя в наше облачное время такие решения, наверное, большая редкость
                        Ответить
                      • > отпечатков пальцев
                        > безопасности
                        Вход по отпечаткам, имхо, на стороне удобства, но никак не безопасности...
                        Ответить
                  • > неподписанных вендором осей
                    Поставь свои ключи и эта фишка станет плюсом.

                    > remote management
                    Ну блин, такого говна и на bios могли напихать (но там написать это было бы на порядок сложнее, да).
                    Ответить
                    • З.Ы. Тот же AMT куда страшнее выглядит, а ведь его не только на серваках ставят.
                      Ответить
                      • Борм, ты силен в usb?
                        Конктрено в ehci и usb-hubs?
                        Ответить
                        • А конкретней?
                          Ответить
                          • Мну хочет научить одну редкоземельную ОС делать selective suspend: усыплять ненужное устройство. Делать это не при отстуствии активности (как деолают все остальные) а вручную, по требованию пользователя (ну точнее там будет ioctl для этого и клиентег).

                            Я уже научился selective suspendить у ehci (если порт включен и не делегирован компаньённому ohci/uhci) : надо в PORTSC записать спец битик, и он физически выключает порт. Но на порту сидит его root hub, так что отключаются все устройства (мышка гаснет!).

                            Я хочу теперь отключить конкретный порт хаба.

                            В usb2.0 hub spec сказано что надо послать message SetFeature c PORT_SUSPEND (пакет типа setup)

                            Но я не понял пока надо-ли его слать хабу или конкретному устройству, и что если хаб у меня не 2.0, по-другому-ли там быть?

                            В идеале хочется сэмулировать поведение Windows PnP manager который умеет отключить всю иерархию: порты через setFeature, потом рутхаб через PORTSC потом сам контроллер через какой-то его протокол, потом само устройство через PCI Power management, затем чуть-ли не рут комплекс через AHCI итд.

                            То-есть у тебя такое дерево и все оно управляется одном клиентом (линуксовый sysfs примерно такой же, но не такой красивый, а например в freebsd для usb вообще отдельная тулза usbconfig)

                            Но начать бы с порта.
                            Ответить
                            • > редкоземельную ОС
                              Дай угадаю: OpenBSD?
                              Ответить
                            • > root hub
                              Root hub же встроен в контроллер, его портами ты и рулил через PORTSC. А это скорее rate-matching hub (или как там его называют?), без которого тебе бы пришлось бы ебаться с OHCI/UHCI и перебросом медленных девайсов на них.

                              > надо-ли его слать хабу или конкретному устройству
                              Хабу. Судя по доке, в 1.х всё было точно так же. Вроде бы в 2.0 хабам только сплит-транзакции добавили.
                              Ответить
                              • >>А это скорее rate-matching hub
                                Это вместо companion ohci/uhci?
                                А где он спепцифицирован, в ehci?

                                зы: вижу
                                https://blogs.msdn.microsoft.com/usbcoreblog/2010/09/22/reasons-to-avoid-companion-controllers/


                                компаньены зло, их выкинули на мороз

                                Так, получается что топология такова:
                                ehci --> root_hub --> rate_matching --> мышка_или_иное_hid

                                верно?

                                >>Вроде бы в 2.0 хабам только сплит-транзакции добавили.
                                А в тройке?
                                Я доку по usb3 и xhci боюсь даже открывать.

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

                                Вот порты рутхаба мне надо отключать в специфичной для *HCI манере.
                                Ответить
                                • > А в тройке?
                                  Бля, там сотня метров и качается как по модему. Но я думаю, что приостановка портов и там будет работать. Зачем базовые фичи ломать без причины? Воткнёшь новый хаб в старый комп со старой осью и он не заработает...

                                  > ehci --> root_hub
                                  [*HCI & root_hub] --> rate_matching --> мышка

                                  Но учти, что на других машинах там могут болтаться компаньоны.

                                  > отключать хабы
                                  Отключать даунстрим порты на всех хабах кроме корневого. На корневом -- да, в специфичной для *HCI манере.

                                  > где он спепцифицирован
                                  Да обычный хаб. Точно такой же, как и все остальные. Отдельной спеки на него не будет.
                                  Ответить
                                  • >>[*HCI & root_hub] --> rate_matching --> мышка

                                    Так когда я шлю SetFeature(SUSPEND,port) я целюсь в rate matching (ну или в даунстрим), а не в root, правильно?

                                    Root на такие вопросы не отвечает, его надо через *HCI-spefic метод крутить.

                                    >>Но учти, что на других машинах там могут болтаться компаньоны.

                                    ну я уже понял что надо проверить port owner и enabled. Если порт отдали компаньону то он port owner == 1, и тогда его нельзя суспенд через PORTSC.

                                    Меня больше пугает разнообразие топологий: где-то там будет мышка прямо в руте торчать (где нет rate matching), где-то будет rate matching, где-то будет нехуевое такое дерево.. В общем мне надо как-то попросить пользователя указать адрес устройства (или путь к нему) и у близжайшего апстримхаба попросить суспенд.

                                    >>Да обычный хаб.
                                    Короче, у нас бывает 2 вида хабов:

                                    1) рут хаб
                                    2) просто хаб

                                    Первый управаляется через контроллер, второй через setup messages, так стало понятнее.

                                    По ходу вопрос: я верно понимаю как работают мессаджи: их пишут в спец. лист в памяти в виде структурки, и их контроллер оттуда накачивает (его программируют на знание адреса структуры этой) и выполняет и перекладывает типа в лист исполненых. так?
                                    Ответить
                                    • > Root на такие вопросы не отвечает
                                      Дык он и не USB девайс, чтобы на них отвечать.

                                      > разнообразие топологий
                                      Enjoy your USB. Ну тут или полный путь по дереву хабов указывать придётся или адрес девайса (он уникальный в пределах HCI).

                                      > работают месседжи
                                      Если HCI с DMA (а на ПК других и нет) -- примерно так, да. Добавляешь ему в очередь структуры с задачками (физический адрес буфера, адрес девайса на шине, эндпоинт на девайсе, что делать) и дальше он сам.
                                      Ответить
                                      • >>Ну тут или полный путь по дереву хабов указывать придётся или адрес девайса

                                        Судя по твоей фразе "адрес девайса на шине" в пакете указан адрес девайса, и хабы сами понимают как его туда доставить, да?

                                        То-есть если ОС выдала номер 42 мышке на вооооон том хабе , но контроллер поймет как это ему доставить через все хабы?

                                        >>Если HCI с DMA (а на ПК других и нет)
                                        Ну, начиная с PCI все шины на ПК умеют DMA, а все HCI вроде и описаны как PCI(express) девайсы. Так что если где-то и есть USB контроллер без DMA то он точно не на PCI) А что, бывают такие?

                                        В общем спасибо тебе, стало как-то понятнее.
                                        Ответить
                                        • > А что, бывают такие?
                                          Микроконтроллеры. Хотя там тоже DMA, просто не такое навороченное...

                                          > как это доставить через все хабы
                                          Да ему похуй в общем-то. Хабы же не просто так хабами называются. Собственно почему им в 2.0 и пришлось прикручивать сплит-транзакции для портов, куда воткнуты медленные девайсы.
                                          Ответить
                                          • Понятно, значит хабы у нас умные и в курсе на каком конце у них какое устройство адресовано.
                                            Ответить
                                            • > хабы у нас умные
                                              Да нихуя, тупо бродкастят если верить спеке. Ловить SET_ADDRESS и вести табличку им, конечно, никто не мешает, но зачем?

                                              In the downstream direction, hubs operate in a broadcast mode. When a hub detects the start of a packet on its upstream facing port, it establishes connectivity to all enabled downstream facing ports.

                                              З.Ы. В 3.0 может быть и поумнее что-то.
                                              Ответить
                                              • Кто же знает о своем адресе? Устройство?

                                                ну да, они же хабы а не свитчи
                                                Ответить
                                            • З.Ы. Ну да, в 3.0 прикрутили Routing String (маршрут по дереву хабов) для super-speed соединений.
                                              Ответить
                            • З.Ы. Учти, что девайс может попросить выход из suspend. Т.е. это не отключение порта.
                              Ответить
                              • Девайс может сделать wakeup, я уже читал. Но там можно этот wakeup отключить вроде, хотя наверное у разных классов по-разному. В целом рекомендована такая схема:

                                1) OS видит что девайс ничо не делает
                                2) ОС его Suspend в соответствии со своим power policy
                                3) девайс просыпается (ну там мышку дернули например)


                                Но я это не осилю с ходу, я хочу пока вручную хотяб отключать

                                А как правильно отключить порт если не через суспенд?
                                Ответить
                                • ClearPortFeature(PORT_ENABLE).

                                  З.Ы. А ты не боишься вот так нагло в обход оси кидать запросы контроллеру? Всё-таки у оригинальных драйверов тоже свой стейт есть.
                                  Ответить
                                  • >>ClearPortFeature(PORT_ENABLE).
                                    Я читал про это, но там потом надо reset вроде делать после пробуждения, нет?

                                    Так ты советуешь отрубать порты на хабе через PORT_ENABLE?


                                    >>А ты не боишься вот так нагло в обход оси кидать запросы контроллеру

                                    Ось открытая, так что я прямо в драйверах ковыряюсь)
                                    Но может оказаться что мне придется как-то явно делать reset куче устройств.
                                    Ответить
                                    • > после пробуждения
                                      А не будет пробуждения. Порт отключится до тех пор, пока ось сама не кинет PORT_RESET или ты устройство не переткнёшь. Т.е. это если тебе надо совсем отрубить порт. Хотя девайс всё ещё может сделать вид, что его переткнули, ось пойдёт делать ему PORT_RESET и порт включится обратно. Но от этого только PORT_POWER отключать, что не везде работает (хаб может не уметь управлять питанием на портах по-отдельности).

                                      А если просто в спячку загнать надо -- то PORT_SUSPEND, как ты и писал.
                                      Ответить
                                      • >>тключится до тех пор, пока ось сама не кинет PORT_RESET
                                        падажи, а SetPortFeature(PORT_ENABLE) разве не бывает?

                                        >>. Но от этого только PORT_POWER отключать
                                        А если это self-powered device?

                                        >>А если просто в спячку загнать н

                                        Смотри: бизнес-заадача такая: "хочу отключить камеру на ноутубке которой я все равно не польщуюсь".
                                        Мне этот порт лучше suspend или disable? или попробовать убрать power?
                                        Ответить
                                        • Если просто энергию поэкономить -- suspend (камеры вроде resume не делают, если на них кнопочек нету). А если ты не хочешь, чтобы за тобой подсматривал большой брат -- заклей её изолентой, блджад то disable и запрети операционке делать reset этому девайсу (на всякий случай, вдруг злая камера сделает вид, что ты её переподключил).

                                          > Кто же знает о своем адресе?
                                          Да, устройство.

                                          > SetPortFeature(PORT_ENABLE)
                                          Не бывает. Когда ты втыкаешь девайс, хаб просто уведомляет твою ось об этом, порт остаётся disabled (как и после ClearPortFeature(PORT_ENABLE)). Ось выводит устройства из disabled в enabled по-одному через reset (с помощью PORT_RESET). После reset'а устройство всегда имеет адрес 0 и ось кидает ему SET_ADDRESS, чтобы оно знало, как к нему будут обращаться в будущем. Как-то так.
                                          Ответить
                                          • Похоже, надо сделать ioctl который умеет и так и сяк, а дальше уже режать на уровне клиентской либы.

                                            >> После reset'а устройство всегда имеет адрес 0 и ось кидает ему SET_ADDRESS,
                                            Ну так это тожесамое, что переподключить, верно?
                                            Оно сначала выдаст ему адрес, затем считает всяккие class и vendor, на основе их запустит драйвер который сконфигурирует устройство уже под себя итд.

                                            понятно
                                            Ответить
                                            • Ну да, только после программного отключения через ClearPortFeature(PORT_ENABLE) ось, скорее всего, не пойдёт сразу же делать reset (т.к. хаб не сообщал ей о том, что в порт что-то воткнули). Т.е. порт останется выключенным пока девайс физически не переткнут (или девайс не сделает вид, что его переткнули).

                                              А после ручного перетыкания -- пойдёт (т.к. хаб увидел, что в порт что-то воткнули и рассказал об этом оси).
                                              Ответить
                                              • Ну значит придется пользователю делать reset явно потому что переткнуть камеру в ноутбуке не очень легко:))

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

                                                      Всё-таки в простое ось ждёт события "девайс выдран" и "девайс воткнут" а не "девайс прошёл резет и готов к установке адреса".
                                                      Ответить
                                                      • Охуенная у меня получится система: отключается одной коммандой, а включается обратно перезагрузкой:))

                                                        Как ос узнает о втыкании? MSI приходит от *HCI?

                                                        Тогда мене надо найти то место в драйверах *hci которое его обрабатывает и как-то его дернуть после ресета
                                                        Ответить
                                                        • Если от root hub -- да, HCI скажет (это должно обрабатываться где-то в драйвере HCI). Если от другого -- то из interrupt pipe хаба прилетит сообщение (а это должно обрабатываться в драйвере хаба).

                                                          З.Ы. А ведь изначальная идея с suspend вообще работать не будет -- устройство разбудят по первому же запросу от его драйвера. А если драйвера нет -- то никто к нему лезть не будет и оно само уснёт.

                                                          Может проще драйвер камеры заблеклистить? :)
                                                          Или запросы отшибать с timeout или access denied.
                                                          Ответить
                                                          • (шепотом) в той оси нету динамической подгрузки драйверов, я не могу ничего заблеклистить, но я могу отключить драйвер у ядра и перезагрузиться. Но я не хочу перезагружаться.

                                                            Не очень понял: кто его разбудит? Разве хаб в спящий порт что-то передаст?
                                                            Ответить
                                                            • > Разве хаб в спящий порт что-то передаст?
                                                              Дык в том и фишка suspend'а. Он же для экономии энергии сделан. Хост всегда может разбудить девайс по своему желанию (выведет порт из suspend и девайс тоже проснётся). Полусонный девайс тоже может разбудить хост если какое-нибудь интересное событие произошло (даже если хост и десять хабов по дороге до него тоже спят).
                                                              Ответить
                                                              • А, понял.

                                                                Ты считаешь что драйвер условного mass storage попробует считать данные с устройства, драйвер usb увидит что устройство спит и явно разбудит его порт?

                                                                То-есть получится что уложив камеру спать я могу разбудить ее тупо почитав или ioctlнув /dev/[моя_камера]?

                                                                Это не так плохо, кстати: если юзер осознано засуспендил порт с флешкой например (чтобы не мигала) то пусть и umount сделает.

                                                                Хотя дизеблить ТОЖЕ надо. Получается что надо и то и се.

                                                                Похоже что умные ОС (винда, ляних) следят за суспеном/резюмом сами, а вот задизеблить явно дают пользователю
                                                                Ответить
                                                              • ахаха, у меня получилось) оказалось что не надо ходить по всему дереву (можно, но не надо). У usb bus есть указатель на массив устройств, у каждого устройства есть указатель на апстрим хаб и на его порт, а в порте есть nport) и еще есть готовая функция set_port_featute(*hub, port, комманда)

                                                                suspend отрубил мышку, а вот планшету не отключил питание, а сброс enabled сделал и то и другое.

                                                                Правда обратно его включать я пока не пробовал.

                                                                Я еще не понял имею-ли я право делать это напрямую, потому что там есть возможность поставить задачу на пул (типа execute_task(указатель_на_функцию). Возможно что там синхронизация структур может сдохнуть если без таски.

                                                                Ну в общем я напилю красивый UI, и если патч примут буду у мамы системным програмистом, без тебя бы я долго пытался слать сообщения рут хабу и тупил бы, так что спасибо.

                                                                Кстати, на virtualbox это нихуя не работает: эмулируемый ими контроллер имеет только рутхаб и не отключает устройства, а на живом компе работает
                                                                Ответить
                    • >Поставь свои ключи и эта фишка станет плюсом.

                      А как это сделать? Они же вшиты в девайс, не?
                      Ответить
                      • > А как это сделать?
                        Зайти в setup, снести виндовые вендорские ключи. SecureBoot перейдёт в режим установки. Когда ты запишешь свой ключ в NVRAM, SecureBoot включится обратно и будет доверять только тому, что подписано этим ключом.
                        Ответить
                        • >снести вендорские ключи
                          Во многих ноутах в сетапе нет опций для их удоления.

                          Может тулзами какими-то специальными перепрошивать. Но это явный геммор.
                          Ответить
                          • Потому что ноут надо покупать свободный:)

                            Я вот как-то видел Asus который после обновления фирмваре стал насильно ставить сервис, который позволял его удаленно заблочить (типа защита от воровства).

                            Фирмварь была страшно умная: Она умела NTFS, находила там autochk (это проверка диска, которую винда (session manager точнее0 запускает еще до загрузки чтобы прокрутить лог если выключили некорректно) и патчила autochk чтобы он устанавливал этот сервис.

                            Ну поскольку autochk в реестре прописан то я скорпировал в "autochk_clean" и прописал его, и теперь фирмваря патчит autochk который не запускается.

                            Смешно конечно, но это безопаснее чем считывать rom, вырезать оттуда эту дрянь и лить его обратно: можно сделать кирпич (программатора у меня не)
                            Ответить
                            • свободный ноут = фри эз фри бир
                              харам же

                              собери ноут из исходников!
                              Ответить
                              • А есть принципиально свободные ноуты, кстати.
                                Они должны

                                1) использовать CoreBoot (ну или фирмварю с исходниками)
                                2) иметь только то железо, которое официально документировано (например нельзя иметь карту от nvidia)

                                Некоторые считают что только так можно гарантировать безопастность и стабилность: никаких БЛОБов, никакой проприетарщины
                                Ответить
                                • И никаких интеловских процов -- они без ME и его блоба походу даже не стартанут.
                                  Ответить
                                  • Имелись ввиду блобы как бинарные драйверы для загрузки в память а не как фирмварь, но вообще да: интел тоже не очень чистый
                                    Ответить
                          • > нет опций
                            Х.з., это что-то совсем анально огороженное. Что за ноут?

                            > тулзами
                            Маловероятно, это ж ёбаная дыра если обычный софт может менять состояние секьюрбута. Только программатор, только хардкор...
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • > шумом своего вентилятора
                                Ну нихуя себе. Помню, иду я по улице, смотрю -- бабушку ветром сдуло, а оказывается это ты свой нубук включил...
                                Ответить
                              • Сейчас тебя Борманд отпиздит за то что ты EFI обозвал биосом.

                                Что до твоего вопроса, то может быть два случая:
                                Из относительно неглубокого сна (типа S3) винда сама может себя выводить, это включается/выключается в powercfg:
                                Perf.plan/ Sleep / Allow wakeup
                                См.
                                https://s8.postimg.cc/iozrpzrjp/power.png

                                Управляют этим System Wake-up Events
                                Почитай в MSDN про функцию CreateWaitableTimer
                                https://docs.microsoft.com/ru-ru/windows/desktop/Power/system-wake-up-events

                                Если же ты уверен что просыпается именно EFI (я на 60% уверен что это не так, что винда такую странную вещь не стала бы делать)
                                то в некоторые прошивки (даже когда они были биосами) имели такую опцию: почти всегда она настраивалась через из setup, но ОС могла записать в nvram напрямую.
                                Например: http://manpages.ubuntu.com/manpages/bionic/man8/nvram-wakeup.8.html

                                Я не уверен что это умеет винда (грузанись с живого флеша с линуксом и проверь) и совсем не факт что твой фирмварь так умеет.

                                Так же ACPI 5.0 имеет описние такого устройства:

                                9.18 Time and Alarm Device.
                                ...
                                The wake timers allow the system to transition from the S3 (or
                                optionally S4/S5) state to S0 state after a time period elapses.

                                Умеет-ли им пользоваться драйвер acpi.sys в винде и есть-ли для того API я не знаю, и не факт что твой EFI это умеет. Можешь считать эту таблицу, конвертнуть в ASL и посмотреть есть-ли она там: если есть то можно наверное написать драйвер который будет ее дергать. Для начала проверь что есть устройство ACPI000E.

                                Считать список таблиц програмно можно через структуру _DXGK_FIRMWARE_TABLE_INTERFACE (пишет MSDN), но я не пробовал.

                                Ждем борманда, но начни все таки с отключения просыпа по таймеру
                                Ответить
                                • А что мне нужно сделать, чтобы Борманд одел костюм женщины-кошки и отпиздил меня плёткой по попе?
                                  Ответить
                                  • Ня :3
                                    Ответить
                                  • З.Ы. Может быть мне ещё в девочку-волшебницу переодеться и отпиздить тебя магическим жезлом?
                                    Ответить
                                    • Я всегда мечтал об этом.
                                      Ответить
                                    • Бормондяша не оброщай внимание этого петошка. давай я периоденусь в мальчика японсково школьника ты в девочку волшебнецу
                                      посидим вместе выпем кофе покодим
                                      Ответить
                                  • Выпрыгни с 15-го этажа, и всё у тебя будет. Обещаю.
                                    Ответить
                                    • Прыгнул с 16-го этажа и вонзился хуем в твою жопу, словно дротик.
                                      Ответить
                                • Да хуй знает, если честно. Будильник в RTC в общем-то с древних времён есть. Скорее всего и ACPI Alarm Device и UEFI'шный рантайм сервис SetWakeupTime() его и юзают.

                                  З.Ы. В виндовом планировщике задач есть галочка "будить комп для выполнения этой задачи". Возможно, что обновление через такую задачу и запускается. Я бы в эту сторону покопал.
                                  Ответить
                              • Смирись. Они же не просто так переименовали "мой компьютер" в "компьютер". Это было намёком.
                                Ответить
              • Не хочу UEFI, не хочу бейсик, хочу набирать программы переключателями на передней панели.
                Ответить
              • Бували компы с КолибриОСь.
                Ответить
                • Или я вру? Но есть встраимаеваимаевамая версия КолибриА.
                  Ответить
                  • Да вру, но был один энтузиаст:

                    http://board.kolibrios.org/viewtopic.php?f=25&t=3446
                    Ответить
    • Вот тут тоже таким извращением занимаются
      http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

      > This forty-five-byte file is less than one-eighth the size of the smallest ELF executable we could create using the standard tools, and is less than one-fiftieth the size of the smallest file we could create using pure C code. We have stripped everything out of the file that we could, and put to dual purpose most of what we couldn't.
      Ответить
      • Отличная статья!
        Читается на одном дыхании. Зожатие, имперации, оптимизирование до предела.
        Ответить
    • То ли дело дос:
      org 100h
      ret
      Хотя смысла в такой экономии нет, меньше кластера на диске не зоймёщ.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • В нтфс так?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Бля, хуй поймёшь.
              Ответить
            • Довольно логично, чо.

              Постгря вон тоже научилась недавно в индексах прямо данные хранить, в этом индексе не участвовавшие
              Ответить
              • посмотрим станет ли лучше

                сейчас приходится засовывать в индекс эти поля, помнить про порядок, и всё равно часто сосать хуйцы, т.к. неупотребление запросом *всех* перечисленных в индексе полей, а, например, только первых (ну что логично), вместо index-only scan приводит к bitmap scan + recheck condition + обращению в исходную таблицу

                оракл, например, не ебет так мозги - ему не страшно, если в индексе больше дополнительных данных, чем хочет конкретный запрос, главное с порядком полей угадать - будет всего-то range scan индекса и в исходную таблицу никто не полезет лишний раз
                Ответить
    • Программисты -- странные люди, меряются у кого меньше.
      Ответить
    • В результате дополнительных исследований выяснилось, что команда mov eax заполняет регистр
      процессора соответствующим номером системного вызова Linux, а int 0x80 производит сам вызов.

      Сколько грантов было выделено на эти исследования?
      Ответить
      • В результате дополнительных исследований выяснилось, что сложение 2 и 2 в резульатате дает 4.

        Кстати, это уже не правда: Linux давно перешел на sysenter же, а int 0x80 не используеца
        Ответить
    • > Во-первых, я выяснил, что излишни секции .data или .text

      п и з д е ц
      Ответить
    • А можно еще набрать в блокноте bugoga.
      Ответить
    • Почему же, вот - https://github.com/arjun024/tiny-elf/blob/master/tiny.asm 45B
      Ответить

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