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

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

    • Аналога досовского com-файла, который содержал только сырой образ машинного кода в памяти (без префикса сегмента программы), в других операционках нет.

      Во всех современных ОС бинарник содержит несколько секций описания сегментов (даже если модель памяти flat), чтобы разделять код и данные, как того требует защищённый режим.
      Ответить
      • Кстати, в "Линуксе" кроме "ELF" ещё можно использовать "a.out". Он вроде бы должен быть покороче.
        Ответить
        • Кстати, у PE и ELF есть обший предок: COFF
          Ответить
          • Да. Но сейчас COFF per se нигде не используется, только как промежуточный формат между компилятором и линкером.
            Ответить
      • > Аналога досовского com-файла,
        Археологи говорят, что COM пришли в DOS из CP/M. Хотя можно напейсать свой загрузчик и юзать нешто подобное в других осях.
        Ответить
        • Верно. В "DOS" из "CP/M" много чего пришло. От некоторых фишек позже отказались. Например, отказались от "FCB" (file control block), который поддерживался только для совместимости с программами, написанными во времена DOS 1.0. Кстати, у "FCB" была интересная особенность. Он состоял из двух частей: обязательной и опциональной. Самое смешное, что флаг присутствия опциональной части находился... в опциональной части. Т. е. чтобы узнать, есть ли опциональная часть, нужно... прочитать опциональную часть (и проигнорировать то, что прочитали, если вдруг флаг сброшен). Великолепный паттерн проектирования!
          Ответить
          • Никогда FCB не юзал. Проще юзать функции с дескриптором файла (кстати как они назывались?)
            Ответить
            • Да, функции с дескриптором проще.

              У FCB была одна приятная мелочь: функция, которая показывает стартовый кластер директории (при использовании FAT). Узнав стартовый кластер, можно было дисковыми функциями прочитать директорию как файл и достать значения нестандартных полей (длинные имена файлов Windows 95, права доступа DR-DOS и т. п.). Больше ничего прикольного в FCB не было.
              Ответить
          • Кстати, ведь в 1.0 не было exe?
            Ответить
      • > разделять код и данные,
        На винде раньше можно было одну секцию для кода и для всего остального.
        Ответить
        • Да и сейчас можно по-любому.
          Ответить
          • А мне разрешат пописать в секцию с кодом?
            Ответить
            • В заголовке PE можно флаги складывать:
              https://msdn.microsoft.com/library/windows/desktop/ms680547%28v=vs.85%29.aspx#section_flags

              Поставим IMAGE_SCN_CNT_CODE | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE и будем иметь секцию, как захотим.
              Ответить
        • Нет. Просто можно было отказаться от секции ".data", размещая все переменные в стеке. Только тогда они будут неинициализированными.
          Ответить
          • Кто мешает одну RWX секцию юзать под всё?
            Ответить
            • Бизапастность!
              Ответить
              • P.S. Блин, а ведь правда же можно. Только пацаны не поймут.
                Ответить
            • Спасибо за идею! Тогда же можно будет писать самомодифицирующийся код!
              Ответить
          • А ведь можно константы разместить в ".text" (в секции кода) и копировать их в стек при старте программы. Тогда можно использовать и инициализированные переменные.
            Ответить
            • Не особо удобно, кмк. Придётся или код релочить (в нём же все адреса этих констант на .text будут указывать) или постоянно таскать с собой указатель на скопированный блок (причём сохранить его некуда).

              Это ж не микроконтроллер с фиксированными адресами.
              Ответить
              • Попытаюсь показать, что я имел в виду:
                const int x_initial = 100500; /* начальное значение поместим в .text */
                int main() {
                    int x_current; /* а эту переменную разместим в .bss */
                    x_current = x_initial;
                   /* вот теперь можем использовать x_current, как захотим */
                }
                Ответить
                • Ну вот дальше придётся этот x_current пропихивать во все функции, которым он нужен. Т.е. это всё-таки не глобалка.

                  Лучше уж тогда вообще глобалки не юзать, имхо. И не пытаться их сэмулировать.
                  Ответить
                  • Пропихнул тебе во все функции, проверь.
                    Ответить
            • Кстати, если в fasm не указать секцию он создат одну секцию .flat для всего.
              Ответить
            • Зачем так сложноу ?
              Лить константы прямо в секцию кода, неподалёку от места их применения, добавляя прямо над ней прыжок на размер константы ( аля jmp short какой-нибудь ).
              Помнится, какие-то асм-компиляторы прямо так и делали( в этом случае, адреса констант проставлялись фиксированные ), либо же, чутка хитрее( шортопитухи и вычисление адреса константы относительно запрашивающей константу инструкции ).
              В последнем случае, при норм компоновке, получаемый код можно норм внедрять и в другие проги
              Ответить
      • @чтобы разделять код и данные, как того требует защищённый режим.

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

      З.Ы. Если скомпилить в a.out, как советует guest, и стрипнуть символы, то получится всего 44 байта (из которых 12 -- твой код, а 32 -- заголовки).
      Ответить
      • Стандарты исполняемых файлов на пути оптимизации размера?
        Ответить
        • Ещё напрягает, что в популярные ОС не встроен интерпретатор языка программирования HQ9+.
          Ответить
          • Меня жутко бесит что в современные PC не встроен интерпретатор BASIC.
            Мало того что это напрямую нарушает принцип обратной совместимости, так еще и некоторые firmware врут, сообщая в BDA (или каких-то таких структурах) что он есть
            Ответить
            • Его перестали встраивать уже в 386. Вызываешь соответствующее прерывание, а BIOS пишет: "No ROM BASIC. Press any key to reboot".
              Ответить
              • Дык воткни флешку с бейсиком и перезагрузись.
                Ответить
                • Не круто. Круто, когда при невозможности загрузить операционку "BIOS" запускает какую-нибудь фигню типа интерпретатора "Бейсика".
                  Ответить
            • Его перестали встраивать уже в 386. Вызываешь соответствующее прерывание, а BIOS пишет: "No ROM BASIC. Press any key to reboot".
              Ответить
              • Вот примерно с 386 все и катится в сраное говно
                Ответить
                • Умели же раньше делать... Не то, что сейчас...
                  Ответить
                  • Умели, да. И писать умели для tiny mode когда вся программа в одном сегменте, и документацию читать умели оффлайновую, и кодить в текстовых редакторах даже без лексера, и стековерфлоу не было, и член сто мороженое было вкусным
                    Ответить
            • >Меня жутко бесит что в современные PC не встроен

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

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

                  Ну вот, такая же фигня, как с Бейсиком после 286.

                  Почему нет стандарта на то, что должно быть обязательно встроено?
                  Ответить
              • > вредную дичь
                Что там вредного то?

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

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

                  А 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 и его блоба походу даже не стартанут.
                                  Ответить
                                  • Имелись ввиду блобы как бинарные драйверы для загрузки в память а не как фирмварь, но вообще да: интел тоже не очень чистый
                                    Ответить
                          • > нет опций
                            Х.з., это что-то совсем анально огороженное. Что за ноут?

                            > тулзами
                            Маловероятно, это ж ёбаная дыра если обычный софт может менять состояние секьюрбута. Только программатор, только хардкор...
                            Ответить
                            • Офтопик. Какой программой можно программировать таймер включения/выключения компьютера в BIOS? Винда туда пишет какую-то хуйню и комп включается в неподходящий момент, чтобы скачать обновления Винды (при отсутствии сети) или сделать ещё какую-нибудь гадость (особенно, когда это ноутбук в дороге с неполным зарядом аккумулятора при отсутствии в зоне видимости розетки).

                              Несколько раз ноутбук будил меня в 4 часа ночи шумом своего вентилятора. Хорошо хоть, что не в 4:20.

                              powercfg ничего не выдаёт. В меню BIOS пункта установки таймеров нет. Тулзы, найденные по-быстрому в интернетах, не работают. Гуглёжка показывает, что у многих такая проблема.

                              Мне теперь нужно дизассемблировать какой-нибудь драйвер, чтобы понять, как он это делает?
                              Ответить
                              • > шумом своего вентилятора
                                Ну нихуя себе. Помню, иду я по улице, смотрю -- бабушку ветром сдуло, а оказывается это ты свой нубук включил...
                                Ответить
                              • Сейчас тебя Борманд отпиздит за то что ты 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
      Хотя смысла в такой экономии нет, меньше кластера на диске не зоймёщ.
      Ответить
      • То ли дело "NTFS", где самые мелкие файлы могут храниться не в кластерах, а прямо в каталоге.
        Ответить
        • В нтфс так?
          Ответить
          • Гуглёжка показывает, что не всегда:
            http://forum.ixbt.com/topic.cgi?id=22:83204

            Чтобы файл не занимал кластеров, он должен быть очень маленьким (лимит меньше килобайта) и не иметь записей ACL. Возможно, есть ещё какие-то ограничения.
            Ответить
            • Бля, хуй поймёшь.
              Ответить
            • Довольно логично, чо.

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

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

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

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

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

      п и з д е ц
      Ответить
    • А можно еще набрать в блокноте bugoga.
      Ответить
      • И что ьудет?
        Ответить
        • Я не шучу, действительно можно.

          http://www.wikireality.ru/wiki/Bugoga
          Ответить
          • Досовский com-файл может вообще состоять из одного байта (инструкция retn, например).
            Ответить
          • А вообще пример интересный. Инструкцию bound придумали, кажется, во времена 386, чтобы проверять границы массива в защищённом режиме (хотя эта инструкция работает и в реальном). Для этой инструкции решили использовать прерывание номер 5.

            Досовская программа запускается в реальном режиме или в V86, эмулирующем его. А в этом режиме BIOS обрабатывает пятое прерывание так же, как кнопку "Print Screen". Когда изобретали BIOS, инструкции bound ещё не было и никто не думал, что пятый вектор кто-то займёт.

            Есть несколько примеров прерываний, которые после изобретения защищённого режима решили использовать в других целях. Кстати, в защищённом режиме они ещё делятся на прерывания и исключения. В данном примере речь идёт об исключении (ведь оно вызвано самой программой, а не внешним процессом по IRQ).
            Ответить
            • >> Кстати, в защищённом режиме они ещё делятся на прерывания и исключения
              А исключения бывают Trap, Fault и Abort
              Ответить
          • Открытая гостевуха в 2018 году:
            http://bugoga.denisoft.ru/gb.php
            Ответить
            • Какой багор )))
              Ответить
            • ого, а где иконка "site best viewed in IE 4.0 1024x768"?
              Ответить
              • Иконки нет, но могу предложить никелированную кровать капча обновляется только при запросе картинки (code.php). Если картинку повторно не запрашивать, то можно использовать ОДНУ капчу на ВСЕ запросы, т. е. один раз разгадав капчу, зафлудить всю гостевуху.
                Ответить
            • Откуда такая популярность у этого сайта? Или кроме автоботов там никто не пишет?
              Ответить
              • Десептеконы еще..

                Я думаю что бОльшую часть этого говна кто-то из местных скриптом насрал
                Ответить
                • Я не срал, братишка. Это хлеб!

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

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

                  Верните мне мой 2007-й!
                  Ответить
                  • 2007 это уже уеб2.0, мокрпол, хуюзер дегенерейтед контект, и уже почти руби на рельсах.

                    а ГБ это 2001 год. Странное решение конечно
                    Ответить
                    • В 2007 году ещё был жив Народ.ру с гостевыми книгами и прочими атрибутами 90-х. Народ.ру и задавал стиль другим проектам.

                      Правда, в 2007 году уже появилась блогоплатформа Я.ру с современными плюшками, но она олдфагам казалась новомодной фигнёй, поэтому на неё смотрели с опаской.
                      Ответить
                    • В 2007 году ещё был жив Народ.ру с гостевыми книгами и прочими атрибутами 90-х. Народ.ру и задавал стиль другим проектам.

                      Правда, в 2007 году уже появилась блогоплатформа Я.ру с современными плюшками, но она олдфагам казалась новомодной фигнёй, поэтому на неё смотрели с опаской.
                      Ответить
                      • народ купил юкоз: платформа для вебмастеров на угадайте каком языке.

                        Одно из тех мест которые надо avoid as plague
                        Ответить
                • Тем временем в гостевой книге http://bugoga.denisoft.ru/ уже 10 тысяч багров.

                  Сайт явно заброшен. Владельца затянула служба, но он по-прежнему оплачивает домен и хостинг.
                  Ответить
            • Продолжение.

              http://www.denisoft.ru/dslight -- Система управления сайтом DSLight

              CMS DSLight проверена на совместимость с браузерами Internet Explorer (4 и выше), Opera (6 и выше), FireFox (все версии), Netscape Navigator (4 и выше), Chrome (все версии). Вероятнее всего, CMS будет корректно работать и с другими браузерами. Для комфортной работы желательно поддержка браузером JavaScript, но это не обязательно.
              Ответить
            • И ещё несколько интересностей:

              http://www.denisoft.ru/program/pascal
              http://www.denisoft.ru/program/ci
              http://www.denisoft.ru/program/html
              Ответить
              • В общем этот Денис в свои годы уже умеет писать на борланд си, чинить клавиатуру, обжимать витую пару, и даже написал свою CMS на PHP совместимую с Opera!
                А чего добился ты?:)

                Удивляет конечно только год. Мне кажется это все таки никак не м0жет быть 2007
                Ответить
              • Блядь, какие у него сайты в потфолио
                http://te-44.denisoft.ru/

                Этот человек мой кумир

                Вот он
                http://te-44.denisoft.ru/fa/IMG_0127.jpg
                Ответить
                • или вот еще:

                  http://te-44.denisoft.ru/index.php?c=teachers
                  >>Там ничего не было написано про PCI express или Hipertrading.
                  Ответить
                • >> группе ТЭ-44 выпустившейся в 1997 году

                  Я в 1997 году 11-й класс закончил... Как вспомню, как тяжело было добывать информацию в те времена. Никакого вайфая...
                  Ответить
                  • Мне в то время на дискетку переписали книгу про TurboVision и еще я скачал синюю книгу про модемы. Вот это было сокровище.

                    Никаких стековерфлоу
                    Ответить
                • Самое интересное тут:

                  «Зорьян Денис Александрович
                  Родился 9 сентября 1978.
                  Доцент.
                  В группу попал не сразу, а после 1 курса, когда понял, что без паяльника не могу жить. Но вскоре после близкого знакомства с ИванИванычем понял, что жить я вообще не смогу, если не стану электронщиком, энергетиком и гением.
                  После техникума поступил в ВИПС, закончил его в Академии ФАПСИ. На данный момент служу в Улан-Уде в Федеральной Службе Охраны президента РФ, в чине капитана.»


                  Пиздец. Сейчас, кстати, сотрудникам ФСБ, ФСО, СВР (не только офицерам) запретили трепаться в интернетах о месте службы. Даже акк во Вконтактике с реальным именем иметь запретили (с фейковым можно).

                  Я уже волнуюсь за него.
                  Ответить
                  • Понял, что без паяльника не могу жить и стал силовиком.

                    Все логично же.
                    Ответить
                • Самое интересное тут:

                  «Зорьян Денис Александрович
                  Родился 9 сентября 1978.
                  Доцент.
                  В группу попал не сразу, а после 1 курса, когда понял, что без паяльника не могу жить. Но вскоре после близкого знакомства с ИванИванычем понял, что жить я вообще не смогу, если не стану электронщиком, энергетиком и гением.
                  После техникума поступил в ВИПС, закончил его в Академии ФАПСИ. На данный момент служу в Улан-Уде в Федеральной Службе Охраны президента РФ, в чине капитана.»


                  Пиздец. Сейчас, кстати, сотрудникам ФСБ, ФСО, СВР (не только офицерам) запретили трепаться в интернетах о месте службы. Даже акк во Вконтактике с реальным именем иметь запретили (с фейковым можно).

                  Я уже волнуюсь за него.
                  Ответить
                  • Они там все прекрасны:


                    После техникума поступил в ОГТУ.
                    Косил от армии в аспирантуре Гипрониисельпома и работаел монтером/монтажером/монтажником/монтажистом на ОГТРК. Занимался изготовлением рекламы. Сейчас программный директор Первого канала. Первого городского))

                    После техникума закончил ОГУ, по специальности психолог-преподаватель. Сейчас возглавляет Орловскую Федерацию Ушу, также работает тренером-преподавателем по ушу с


                    Учился в аспирантуре, но все в нашей жизни временно. Занимался строительством. Сейчас ремонтирует компы в фирме Альфа Мастер.


                    После технаря отслужил в армии, в ВИПСе, потом перевелся на контрактную службу, в общей сложности прослужил 5 лет, дослужился до сержанта.

                    После технаря закончил ОГУ. Занимается пассажирскими перевозками.
                    --------------

                    Люди идут в техникум, а иногда и в ВУЗ чтобы потом ремонтировать компы, преподавать ушу детям и дослуживаться до сержанта.
                    Ответить
                    • Один из них вообще после аспирантуры что-то монтировал и занимался изготовлением рекламы.

                      Ну а что делать, если места по специальности не нашлось... или нашлось, но на неудобных условиях (низкая зарплата, например)?
                      Ответить
                    • Один из них вообще после аспирантуры что-то монтировал и занимался изготовлением рекламы.

                      Ну а что делать, если места по специальности не нашлось... или нашлось, но на неудобных условиях (низкая зарплата, например)?
                      Ответить
                    • Один из них вообще после аспирантуры что-то монтировал и занимался изготовлением рекламы.

                      Ну а что делать, если места по специальности не нашлось... или нашлось, но на неудобных условиях (низкая зарплата, например)?
                      Ответить
      • http://govnokod.ru/11315

        guest упоминает программу bugaga

        А что, если Steve_Brown — guest?
        Ответить
    • Почему же, вот - https://github.com/arjun024/tiny-elf/blob/master/tiny.asm 45B
      Ответить
      • Интересно, а тело программы может быть пустым?
        Ответить
        • В этом примере секция кода вообще отрицательного размера. В смысле код затолкали в хидеры (прямо поверх них).
          Ответить
          • Лень сейчас гуглить, но, кажется, и в ELF, и в PE все смещения указываются от начала файла (для пирфоманса). Поэтому можно наложить любой объект поверх чего угодно, в том числе и сам заголовок засрать кодом.
            Ответить
            • >>все смещения указываются от начала файла
              ой-ой, какбы тогда релокейшен работал, а?
              Ответить
              • Принято. Есть смещения, которые отсчитываются от начала образа, загруженного в оперативную память.
                Ответить
        • Или ты про файл нулевого размера?
          Ответить
          • Да я не понял сразу, что здесь код прямо в заголовке.

            > файл нулевого размера?
            Зогорловок-то должен быть. Я имел ввиду, что будет, если будет лишь один заголовок, а кода -- 0.
            Ответить
            • .comу не нужен заголовок (в досе, за CP/M не скажу): он сразу грузица в память по адресу 100h и жжот.

              Кто вспомнит инструкцию MASMа которая говорила ему что сей файл будет загружен по адресу 100h, и все адреса нужно к нему прибавлять -- тому ничего не будет
              Ответить
              • ORG 100H


                Мне не будет ничего. А что будет остальным?
                Ответить
                • Вот да, молодец.

                  Остальным тоже ничего не будет, но спасибо что напомнил что-то такое далекое из моего дества
                  Ответить
              • ORG 100H


                Мне не будет ничего. А что будет остальным?
                Ответить
                • остальные посрамлены как школота, никогда не писавшая tiny программ под дос
                  Ответить
                  • То есть я посрамлён из-за того, что я спал?

                    ЗЫ. Я ещё до твоего вопроса это писал:
                    http://govnokod.ru/24386#comment417713
                    Ответить

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