До сих пор помню многие машинные коды PDP-11 (Электроника-60). Это как первая любовь, помнишь всю жизнь. Создавали программы сразу в машинных кодах в 1985 году, потом записывали на перфоленту. Помню, что код 177 (восьмеричный) - были пробиты все отверстия, в этих местах лента часто рвалась :).
Отличный комментарий! В точку! Они говорят о возможности работы с процессором напрямую, но на деле - предлагают отложить фотошоп и 5 часов подряд рисовать пиксели в пайнте.
@Сергей Каракулов сказать программисту что уже существует библиотека для решения его задачи. Это все равно что сказать поэту что уже написана песня о любви.
В 80-х годах прошлого века я в Политехнической библиотеке переписывал в тетрадку 16-ричные коды из журнала Apple Magazine и в институте их вбивал на реальном компе, получая в итоге работающую программу. Мой лучший результат - "взломать" текстовый редактор Apple II так, чтобы он понимал кириллицу. Правда, пришлось пожертвовать важной функцией copy/paste блоков текста.
Это понятно и легко. Некст челлендж уровня impossible - сделать исполнение шеллкода, но помещая в rwx память не все инструкции сразу, а по одной. Так, чтобы в памяти в момент исполнения всегда была только 1 инструкция, после исполнения которой идёт ее «затирание» и передача управления на следующую ,которую мы также, как в этом видео прокидываем из кучи. (В куче инструкции могут находится в шифрованном массиве, к примеру) Получится прототип защиты кода в памяти. Либо второй челендж уровня impossible - на вход получаешь тот же шеллкод. Имплементируешь алгоритм для поиска rop гаджетов на основе инструкций своего шеллкода. Импортишь хаотично dll и там ищешь эти гаджеты. Потом передаёшь управление от гаджета к гаджету, тем самым исполняя свой шеллкод. Опять же в таком случае шеллкод будет не в одной странице rwx, а разбросан по исполняемым адресным пространствам разных dll. Осилишь?))
Просто лайк. Те кто когда то ковырялся в Радио86РК, Спецалист, Микроша или в подобных монстрах эры начала персональных компьютеров, помнят, что такое Ассемблер.
basic на квант БК в 1997 году. Первый комп после приставок, у меня был уже Panasonic 3DO, но после знакомство с Квантом, не спал суток двое. Документации не было, просто угадывал для чего какая команда нужна. А потом подарили книгу basic для детей, тут все и началось...
Можешь в машинных кодах ? Можешь ) Собственно моя первая программа была в машинных кодах и была взята из журнала Радио (конец 80-ых), в момент когда родители купили компьютер с забавным названием Микроша (процессор КР580) )) Это был кайф от программирования ! Хочешь изучить тему, разбери ее на молекулы. В последующем на чистом машинном написал две игры с псевдографикой и компилятор Форта, начал было трассировщик писать, но школа закончилась поехал дальше учиться. Вспоминаю с ностальгией. Хочу сказать, что если потратить на это определенное время, то даже в коде не сложно программировать. Главное заложить базис в голове. На тот момент, кстати, переходить на ассемблер и не было никакого желания. Казалось, что это лишняя трата времени на писанину. Да и архитектура процессоров КР580 и памяти способствовала, не такая сложная как у современных ПК. С другой стороны при наличии соответствующих инструментов можно и сейчас программировать в коде.
@@marat-nagayev послушайте интервью Стива Возняка, где он говорит что написал компилятор Бейсика для первых Apple на ассемблере. Написал он его за достаточно короткое время. Ну и в качестве кокетства добавлял, что в первой версии не смог или не успел добавить операции с плавающей точкой в бейсике. Вы же не сравнивайте компиляторы сегодняшнего уровня с кучей библиотек и компиляторы 80-ых ! И еще раз - архитектура памяти была упрощенная. При достаточном погружении (практике) писать на машинном языке на тех машинах получалось даже быстрее чем на ассемблере. Вы видимо не представляете объема работы. И уж тем более не представляете внутреннюю красоту языка Форта, ядро которого (без библиотек) может уместиться в кэш современного процессора. И потому, к слову сказать, очень быстрого в исполнении.
А на просторах интернета можете найти людей которые совершили подобный "подвиг" и тоже написали свой компилятор Форта пусть даже и не в машинном коде...
Конечно многое зависит от операционной системы, но в данном случае мы написали только функцию, для выполнения которой надо откомпилированную программу. Используя другие операционные системы (например DOS или Windows 7 x32 (как помнится это последняя ОС поддерживающая COM файлы)) можно писать напрямую в файл и выполнять этот файл. Магия в использовании формата файла COM. По сути ОС при загрузке просто размещает содержимое файла в памяти со смещением 0x100h относительно начала сегмента (начало сегмента занято заголовком содержащим служебные данные, такие как командная строка и прочее) и передает управление на первый байт загруженного файла.
Автор мог, например, взять DosBox, в нем 16-ричным редактором создать COM-файл. запустить и показать - вот то было б реально что просили. А тут, блин, во-первых написал какую-то туфту из 2 команд, даже не Hello, World, а во-вторых - реально писал-то он не в машинных кодах, а на ассемблере.
@@ivankprod Зачем их помнить, на то таблицы есть. И да, я например еще помню что CD - это команда прерывания (и соответственно CD 21 - "int 21h", главное DOSовское API). Но претензии к автору не в том что он не помнит/не знает каких-то кодов (ибо как я сказал выше - это справочная инфа), а в том что заявленное не соответствует сделанному.
Случайно наткнулся на этот видеоролик. Молодец, что решил попробовать, а то остальные все всё знают, но никто не пробует. Единственно, что я бы дополнил - это про структуру команд в двоичном коде - а это "Здравствуй" двоичный код ))). На счет того, что некоторые из комментаторов говорят что это бесполезно - то они не правы. Если ассемблер дает понимание об архитектуре компьютеров, то машинные кода дают представление об архитектуре чипов. А это уже становиться необходимым для разработчиков ОС и драйверов. В особенности для тех, кто собирает свои платы для компа. *Забыл сказать.* Когда-то во времена, когда компьютеры были маленькими, а программисты умными, шла борьба за размер программы. Памяти было мало, а потому экономили каждый байт. Мне известны случаи, когда программист полностью переписывал код, из-за экономии 2х байт программы! И в таких случаях шли на разные ухищрения - типа перехода во внутрь команды! А это, без знания машинных кодом было не возможно.
Прикольно. Раньше в средних школах учили делать ассемблерные вставки. Потому, что без них не выжать производительность. Теперь это мастер класс от профи.
На андроид маркете есть эмулятор советского калькулятора электроника мк54. Когда чуваки писали исходный код, вся документация уже была утеряна, а завод лежал в руинах. Так вот оригинальное содержание ПЗУ восстанавливали с помощью микроскопа
Очень странно, вроде спрашивали написать на машинных кодах, а не на ассемблере. Помню в детстве изучал ассемблер, и при написании программок компилировал их в com файлы, потом через дебагер смотрел что происходит с машкодом, ну и со временем начал писать прямо машкодом com файлы, так как это проще, быстрей, и не нужно компилировать. К примеру вот программа смены текстового видеорежима в досе B8 00 00 CD 10 CD 20 чтобы получить другой видеорежим нужно 00 00 заменить на 03 00. Блин, уже больше чем 25 лет прошло, а до сих пор помню, а что вчера было забыл.
В свое время будучи студентом, без компьютера в тетради писал на wasm 86. Потом переводил в опкоды которые брал из книжки по ассемблеру. На компе в volcov commander, в hex-редакторе вбил программу и потом для инструкций jmp, jnz добавлял реальные смещения. Это была игра змейка. Заработало с первого раза. Отлаживал в уме.
На zx spectrum в середине 90-ых только так и программировал. Тысячи строк на ассемблере, оптимизация кода расчитывая количество тактов. Сегодня же 90% кода тормознутый порожняк.
Не говори, ELITE занимала 40 килобайт, а щас я извиняюсь сpaнbIй мессенджер, в котором ни байта графики, только буквы и смайлы - 50 мегабайт ! ) дрова на видяху анадысь качал - 550 мегабайт ! Это ж как надо разучиться программировать так за 30 лет, не понимаю...
Раньше чистый код писали, а сейчас, если что-то надо - фигакс, линкуем целую библиотеку. Нужна поддержка h264 - прилинкуем целый libavcodec в несколько десятков мегабайт и сотней ненужных кодеков и пофиг, что 95% кода оттуда никогда не будет вызываться. Или exe-шник Doom 3 весил 5 мегабайт, а в Doom 2016 два exe-шника, каждый по 100Мб - один для vulkan, другой для opengl - это даже смешно, учитывая, что движок не стал в 20 раз круче. И текстуры раньше сжимали в jpg, а сейчас фигачат без сжатия. Поэтому такие слоновые игры стали.
@@Bublerkin Глупости пишете. То что не будет вызываться в код не попадет. Кто хочет оптимальный код, нет проблем, пишите на С и даже асме можно если сильно нужно. А если операционка мешает есть DOS.
Евгений, хочу написать, что Вы крутой! Наткнулся на шуточное видео "Голая правда о программистах" и залип на канале просматривая все видео один за другим. Крутая подача, интересные темы! Удачи! Пожалуй подпишусь)
Воу-воу-воу полехче это называется binary injection, Хаккер Соер вернулся :) А я вот не сомневаюсь что однажды вот так вот невзначай в развлекательно-обучающем ролике Соер покажет как написать вредоносную программу ;D PS: в сети и на гите можно най ти статьи как написать загрузчик под биос, если понравился этот ролик то лайк Соеру и вам понравиться написать загрузчик т к он не ELF не PE а именно RAW ни каких библиотек и единственная программа которая запустится на вашем ПК после перезагрузки если вы её вздумаете установить :))) PS2: досмотрел видео до конца:) не совсем binary injection но близко к этому :)
Расценивай это как плюс. Не в каждом вузе так хорошо учат студентов физиков программированию. А ведь это очень востребовано в научных исследованиях. (Сам учусь на физике. Программирование присутствует, но не в таком обьеме)
На ZX Spectrum все игры таким образом и записывались, заголовок на Basic для инициализации процесса загрузки кода в память с помощью peek и poke, затем простыня из шеснадцатеричных значений. Даже книжки продавали, где можно было вручную переписать несколько страниц кодов и получить игрушку :)
Помню тайком в армии экспериментировал с самомодифицирующемся кодом. Перед выполнением функция дешифруется, выполняется, а потом опять шифруется. Старый трюк, но очень интересный.
В Windows есть функции VirtualAlloc и VirtualProtect, которые позволяют менять флаги страниц и исполнять код от куда хочешь. Еще можно поменять флаги секций. Это возможно, потому что в Винде сектора данных и кода накладываются друг на друга, занимая одно адресное пространство, Винда использует страничную организацию памяти, а страница может быть и исполняемой и записываемой одновременно. Я так модифицировал одну программу, заставляя ее менять условие во время выполнения.
Сначала он в какой-то программе набирает код на языке ассемблера, иструкции, что делать, получает их машинный код в 16-ти ричном формате, потом их загоняет в файл и запускает.
Это как минимум прикольно, когда-то прошел учебник Юрова, сдал зачет и с неимоверным удовлетворением забыл аську как страшный сон. Тем не менее хорошее представление о ассемблере иногда полезно.
@@КотЧерный-ю1ф В некоторых задачах (типа однобитного цифрового осцилографа) приходится заморачиваться на то, что быстрее: inc eax inc eax или add eax,2
Это простое использование ассемблера, в код которого передается значения в двоичном формате, хотя все остальные значения, как видно на видео, передаются в шестнадцатиричном формате. Ассемблер, это уже не машинный код. Вопрос, наверное, состоял в том, чтобы писать код чисто по адресации, т.е. чисто бинарные числа.
Написание программы в машинных кодах, это когда ты САМ, а не программа, переводишь мнемоники ассемблера в числа, сам рассчитываешь смещения и адреса и вводишь их в файл. Так что, у автора всё по-честному.
@@СергейМоскалёв-с3ь Покажите в видео где там машинный код, написанный автором, а не выведенный компом на экран? Автор использует только ассемблер для данной ОС. push, mov, ret это по вашему машинный код? Почитайте Википедию что такое машинный код. ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4 А вот пример, именно программы, написанной машинным кодом из этой страницы: Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении): BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
@Vitalii Yarema где же это машинный код? Это просто буковки и циферки. И уж точно, прерывание 10h не имеет отношения к машинному коду. Вы запутались в абстракциях.
@@S0ERDEVS Это вы выложили видео о машинном коде, а не я. Не надо переводить стрелки. Машинный код, к вашему сведению, это только двоичные цифры (0 и 1), которые могут быть представлены при написании кода в шестнадцатеричном представлении. Этот код и сохраняется в байтах в файле, который потом выполняется процессором. Вот и ответьте где у вас на видео машинный код? У вас чистой воды использование инструкций ассемблера. Это, конечно, хорошо, понимать и уметь использовать инструкции ассемблера, но это не машинный код. Что значит прерывание 10h не имеет отношение к машинному коду? Запомните, машинный код, это просто всё в цифрах, без слов mov и других.
очень интересно, и наглядно понял конечно не много, но хоть увидел, что это не магия. В в Хогвард) точно теперь не пойду, буду вас смотреть все-таки безопаснее и комфортнее))
Это шикарно! Хоть решаемая задача весьма проста, но объяснено все очень доходчиво. Хочется попросить сорцы этого "интерпретатора" и побольше подобных видео. В идеале серия видео про подобные вещи, в частности, от нажатия кнопки включения ПК до полноценного запуска ОС с нюансами того, что кого и как запускает, откуда знает где лежит и т. п.
Да... Мучение любителей линукс. В досе можно было вроде в .com файл записать голые команды и это запустилось бы. Деталей не помню. Но вроде когда то изучая ассемблер набирал так программы.
Под DOS-ом, теоретически, можно было сделать всё честно в com-файл. Правда, нужно было правильно сделать заголовок com файла, не помню с окончанием, вроде тоже что-то нужно было. А так, если хотелось побаловаться, в редакторе VC писалась программа на asm, а компилятором, входившем в turbo c, всё компилилось в obj, потом в com (до 32 K).
Не, ну это изи)) Давай теперь следующий челлендж : написать программу водя намагниченной иголкой по блину жесткого диска
Vlad Bubliu Лучше перфокарты нет ничего для мануального кодирования
А почему иголкой - сразу ломом :)
Надо было сделать видео, в котором он разговаривает в двоичном коде :)
@@Uni-Coder зачот :)
по обычному блину
То, что 50 лет назад было суровой правдой жизни, теперь выглядит как хитрый трюк ))
не такой уж суровой, если вспомнить какой средний размер программы был в те времена
даже меньше чем 50, в начале 90х игру питон вводил с журнала )
А еще тогда люди не называли код на ассемблере машинным кодом :)
@@KirillBerezin он писал же в машинных кода просто смотрел коды команды соответствующие ассемблер командам или я не прав
@@KirillBerezin потому что код на языке ассемблера != машинным кодам
Как говорится: Ждем курс написания сайта на транзисторах...
жди
@@AntiBandera господин Соер шуток не понимает)
@@ИванНиколаенко-м2р, по-этому - ждём.
ахахахах
Схематически это не слишком сложно. Тут проблема в количестве транзисторов и помехозащищённости.
До сих пор помню многие машинные коды PDP-11 (Электроника-60). Это как первая любовь, помнишь всю жизнь. Создавали программы сразу в машинных кодах в 1985 году, потом записывали на перфоленту. Помню, что код 177 (восьмеричный) - были пробиты все отверстия, в этих местах лента часто рвалась :).
В наше время это немного похоже на то, как если бы человек вышел из экскаватора и начал копать руками
Когда у тебя есть экскаватор, а надо аккуратно посадить одно семечко в маленький горшочек то почему бы и не вылезти из экскаватора?
@@Veter1992 для этого есть лопата, но уж явно не руками
@@5классвиленкин-ъ4п нет я хочу что бы ты копал руками хочу ! 😂😂😂
@eugene martein так черенок давно уже существует
Отличный комментарий! В точку! Они говорят о возможности работы с процессором напрямую, но на деле - предлагают отложить фотошоп и 5 часов подряд рисовать пиксели в пайнте.
Очень хотелось бы увидеть видео о написании фронтенда сайта на ассемблере, а то HTML сильно тормозит.
тогда и браузер надо свой писать, на веб ассемблере еще может как-то реально.
ну можно сделать фронтенд без html css и js на canvas/webgl + webassembly но зачем, в конечном счете получится своя реализация аналога html и css)
@Сергей Каракулов сказать программисту что уже существует библиотека для решения его задачи. Это все равно что сказать поэту что уже написана песня о любви.
Есть webassembly, но пишешь как бы в движке браузера. Очень крутая и интересная штука
@@СергейКаракулов-в7з в figma кстати так и сделали
В 80-х годах прошлого века я в Политехнической библиотеке переписывал в тетрадку 16-ричные коды из журнала Apple Magazine и в институте их вбивал на реальном компе, получая в итоге работающую программу. Мой лучший результат - "взломать" текстовый редактор Apple II так, чтобы он понимал кириллицу. Правда, пришлось пожертвовать важной функцией copy/paste блоков текста.
Теперь следующий этап - написать собственную ос и захватить 99% рынка
Всего-то и надо 38 лет интенсивного развития.
ru.wikipedia.org/wiki/MS-DOS
38 лет = 324 672 человеко часов
@@KnyPovir просто часов. Человеко-часы это сумма рабочих часов всех людей, которые работали над проектом.
@@Евгений-п1л1ъ/videos
Тогда весь юмор теряется...
@@Евгений-п1л1ъ совершенно верно. когда 40 человек сидят на совещании всего два часа, они убивают две недели рабочего времени.
Это понятно и легко. Некст челлендж уровня impossible - сделать исполнение шеллкода, но помещая в rwx память не все инструкции сразу, а по одной. Так, чтобы в памяти в момент исполнения всегда была только 1 инструкция, после исполнения которой идёт ее «затирание» и передача управления на следующую ,которую мы также, как в этом видео прокидываем из кучи. (В куче инструкции могут находится в шифрованном массиве, к примеру)
Получится прототип защиты кода в памяти.
Либо второй челендж уровня impossible - на вход получаешь тот же шеллкод. Имплементируешь алгоритм для поиска rop гаджетов на основе инструкций своего шеллкода. Импортишь хаотично dll и там ищешь эти гаджеты. Потом передаёшь управление от гаджета к гаджету, тем самым исполняя свой шеллкод. Опять же в таком случае шеллкод будет не в одной странице rwx, а разбросан по исполняемым адресным пространствам разных dll. Осилишь?))
Просто лайк. Те кто когда то ковырялся в Радио86РК, Спецалист, Микроша или в подобных монстрах эры начала персональных компьютеров, помнят, что такое Ассемблер.
куда же без него... половина игр хранило жизни в регистре А , перебор... LD A,254 всегда хватало ))
basic на квант БК в 1997 году. Первый комп после приставок, у меня был уже Panasonic 3DO, но после знакомство с Квантом, не спал суток двое. Документации не было, просто угадывал для чего какая команда нужна. А потом подарили книгу basic для детей, тут все и началось...
@@VERTinBY А DEC A на INC A менял, чтобы жизни, когда помираешь, увеличивались? :)
Синклер-Спектрум!!!
Помню как клавишам действие научился присваивать, лучший день в жизни был LET команда :)
Ух... ностальгия аж вспомнился первый курс и радость после написания драйвера на asm для точечно-матричного принтера
А мы писали контроллер для плазменного резака на tasm, на судостроительном заводе, я другу помогал, а так у меня образование фазанка :D
модем для датчиков на магистральных газопроводах - моя дипломная (ассемблер) ))
Красавчик
Растёте :) отличная подача и свежий вид )) приятное видео
Alexander Savchenko прикалываешься писюн? Нихуя же непонятно!!!!!
Можешь в машинных кодах ? Можешь ) Собственно моя первая программа была в машинных кодах и была взята из журнала Радио (конец 80-ых), в момент когда родители купили компьютер с забавным названием Микроша (процессор КР580) )) Это был кайф от программирования ! Хочешь изучить тему, разбери ее на молекулы. В последующем на чистом машинном написал две игры с псевдографикой и компилятор Форта, начал было трассировщик писать, но школа закончилась поехал дальше учиться. Вспоминаю с ностальгией. Хочу сказать, что если потратить на это определенное время, то даже в коде не сложно программировать. Главное заложить базис в голове.
На тот момент, кстати, переходить на ассемблер и не было никакого желания. Казалось, что это лишняя трата времени на писанину. Да и архитектура процессоров КР580 и памяти способствовала, не такая сложная как у современных ПК. С другой стороны при наличии соответствующих инструментов можно и сейчас программировать в коде.
написал компилятор пока был школьником в машинных кодах?
мужик не делай из нас дураков, это невозможно
не хватит ни мозгов школьника, ни времени
@@marat-nagayev послушайте интервью Стива Возняка, где он говорит что написал компилятор Бейсика для первых Apple на ассемблере. Написал он его за достаточно короткое время. Ну и в качестве кокетства добавлял, что в первой версии не смог или не успел добавить операции с плавающей точкой в бейсике. Вы же не сравнивайте компиляторы сегодняшнего уровня с кучей библиотек и компиляторы 80-ых ! И еще раз - архитектура памяти была упрощенная. При достаточном погружении (практике) писать на машинном языке на тех машинах получалось даже быстрее чем на ассемблере. Вы видимо не представляете объема работы. И уж тем более не представляете внутреннюю красоту языка Форта, ядро которого (без библиотек) может уместиться в кэш современного процессора. И потому, к слову сказать, очень быстрого в исполнении.
А на просторах интернета можете найти людей которые совершили подобный "подвиг" и тоже написали свой компилятор Форта пусть даже и не в машинном коде...
Гений, нет слов, благодаря тебе я сделал генерацию опкодов для моего ассемблера!
Конечно многое зависит от операционной системы, но в данном случае мы написали только функцию, для выполнения которой надо откомпилированную программу. Используя другие операционные системы (например DOS или Windows 7 x32 (как помнится это последняя ОС поддерживающая COM файлы)) можно писать напрямую в файл и выполнять этот файл. Магия в использовании формата файла COM. По сути ОС при загрузке просто размещает содержимое файла в памяти со смещением 0x100h относительно начала сегмента (начало сегмента занято заголовком содержащим служебные данные, такие как командная строка и прочее) и передает управление на первый байт загруженного файла.
Автор мог, например, взять DosBox, в нем 16-ричным редактором создать COM-файл. запустить и показать - вот то было б реально что просили. А тут, блин, во-первых написал какую-то туфту из 2 команд, даже не Hello, World, а во-вторых - реально писал-то он не в машинных кодах, а на ассемблере.
@@_ProstoTak А Вы помните хоть некоторые команды в 16-ичном виде сами?
@@ivankprod Зачем их помнить, на то таблицы есть. И да, я например еще помню что CD - это команда прерывания (и соответственно CD 21 - "int 21h", главное DOSовское API).
Но претензии к автору не в том что он не помнит/не знает каких-то кодов (ибо как я сказал выше - это справочная инфа), а в том что заявленное не соответствует сделанному.
Замечательное видео. Всегда считал машинный код чем-то непостижимым, для реальных хардкорщиков. А после видео, появился интерес к данной теме.
Про ассемблер вы наверное не слышали?
@@andrejvlasov5452 Нет, я слышал про ассемблер
Ютуб просто оракул, уже 4 видео прямо по делу рекомендует
Случайно наткнулся на этот видеоролик. Молодец, что решил попробовать, а то остальные все всё знают, но никто не пробует. Единственно, что я бы дополнил - это про структуру команд в двоичном коде - а это "Здравствуй" двоичный код ))).
На счет того, что некоторые из комментаторов говорят что это бесполезно - то они не правы. Если ассемблер дает понимание об архитектуре компьютеров, то машинные кода дают представление об архитектуре чипов. А это уже становиться необходимым для разработчиков ОС и драйверов. В особенности для тех, кто собирает свои платы для компа.
*Забыл сказать.* Когда-то во времена, когда компьютеры были маленькими, а программисты умными, шла борьба за размер программы. Памяти было мало, а потому экономили каждый байт. Мне известны случаи, когда программист полностью переписывал код, из-за экономии 2х байт программы! И в таких случаях шли на разные ухищрения - типа перехода во внутрь команды! А это, без знания машинных кодом было не возможно.
Прикольно. Раньше в средних школах учили делать ассемблерные вставки. Потому, что без них не выжать производительность. Теперь это мастер класс от профи.
В школе и про TASMучили. И то "профи" не до конца все понимают, объясняют.
Мы с вами наверно в разных школах учились, потому как в нашей всё ограничилось HTML
@@ВеселыйРоджер-н7ыв нашей школе учили word...
@@ВеселыйРоджер-н7ы В нашей вообще всё ограничивалось вордом и экселем
У нас в школе максимум был Паскаль.
Настоящие мужики делают свой проц в spice-симуляторе со своим блекджеком и опкодами.
Я не настоящий, я всего лишь с Microblaze работаю :-P
пфф.. на 155 логике они его делают))
@@andrsam3682 пффф.... даже на релюхах;)
На андроид маркете есть эмулятор советского калькулятора электроника мк54. Когда чуваки писали исходный код, вся документация уже была утеряна, а завод лежал в руинах. Так вот оригинальное содержание ПЗУ восстанавливали с помощью микроскопа
@@Pan-ux3bq по руке от терминатора)
Очень странно, вроде спрашивали написать на машинных кодах, а не на ассемблере.
Помню в детстве изучал ассемблер, и при написании программок компилировал их в com файлы, потом через дебагер смотрел что происходит с машкодом, ну и со временем начал писать прямо машкодом com файлы, так как это проще, быстрей, и не нужно компилировать. К примеру вот программа смены текстового видеорежима в досе B8 00 00 CD 10 CD 20 чтобы получить другой видеорежим нужно 00 00 заменить на 03 00.
Блин, уже больше чем 25 лет прошло, а до сих пор помню, а что вчера было забыл.
В свое время будучи студентом, без компьютера в тетради писал на wasm 86. Потом переводил в опкоды которые брал из книжки по ассемблеру. На компе в volcov commander, в hex-редакторе вбил программу и потом для инструкций jmp, jnz добавлял реальные смещения. Это была игра змейка. Заработало с первого раза. Отлаживал в уме.
Ссылка на функцию - "гениально". С таким же успехом можно было показать, как колить на опкодах в дизассемблере :)
Прикольно, но хотелось бы увидеть реализацию elf/exe с нуля, без кода посредника и вмешательства компилятора ))
На zx spectrum в середине 90-ых только так и программировал. Тысячи строк на ассемблере, оптимизация кода расчитывая количество тактов. Сегодня же 90% кода тормознутый порожняк.
Не говори, ELITE занимала 40 килобайт, а щас я извиняюсь сpaнbIй мессенджер, в котором ни байта графики, только буквы и смайлы - 50 мегабайт ! ) дрова на видяху анадысь качал - 550 мегабайт ! Это ж как надо разучиться программировать так за 30 лет, не понимаю...
@@parametrico нету смысла что-то экономить в ущерб времени разработки когда ресурсы довольно дешёвые
Это где такое сегодня ? 👀90 % порожняк ? 🥴та ты фуфло какое-то гонишь . Кто залайкал тя непойму .такие же фуфела как и ты походу 🤾
Раньше чистый код писали, а сейчас, если что-то надо - фигакс, линкуем целую библиотеку. Нужна поддержка h264 - прилинкуем целый libavcodec в несколько десятков мегабайт и сотней ненужных кодеков и пофиг, что 95% кода оттуда никогда не будет вызываться. Или exe-шник Doom 3 весил 5 мегабайт, а в Doom 2016 два exe-шника, каждый по 100Мб - один для vulkan, другой для opengl - это даже смешно, учитывая, что движок не стал в 20 раз круче. И текстуры раньше сжимали в jpg, а сейчас фигачат без сжатия. Поэтому такие слоновые игры стали.
@@Bublerkin Глупости пишете. То что не будет вызываться в код не попадет. Кто хочет оптимальный код, нет проблем, пишите на С и даже асме можно если сильно нужно. А если операционка мешает есть DOS.
Помню подобное описывал Крис Касперски в статье "Дизассемблирование в уме".
Евгений, хочу написать, что Вы крутой! Наткнулся на шуточное видео "Голая правда о программистах" и залип на канале просматривая все видео один за другим. Крутая подача, интересные темы! Удачи! Пожалуй подпишусь)
Воу-воу-воу полехче это называется binary injection, Хаккер Соер вернулся :)
А я вот не сомневаюсь что однажды вот так вот невзначай в развлекательно-обучающем ролике Соер покажет как написать вредоносную программу ;D
PS: в сети и на гите можно най ти статьи как написать загрузчик под биос, если понравился этот ролик то лайк Соеру и вам понравиться написать загрузчик т к он не ELF не PE а именно RAW ни каких библиотек и единственная программа которая запустится на вашем ПК после перезагрузки если вы её вздумаете установить :)))
PS2: досмотрел видео до конца:) не совсем binary injection но близко к этому :)
Отличная подача, все выглядит очень простым и понятным, хотя с ассемблером не знаком.
Ждем выпуск с перфокартами!)
С перфоратором. 😂
Как всегда Soer на высоком уровне👍👍👍 хотя код низкоуровневый 😂
спасибо, прям напомнило как в универе прогали КП580 вводя 16ричные команды в терминал УМК...
Очень здорово, что Вы подняли эту тему.
Ой какое чудесное видео! Познавательная и интересная! А сам парень Соер умный то какой!
Он же сказал, что только кажется умным.
Как чистый Сишник охринел от того что ты сделал)) сразу подписался!)
блин ностальгнул сразу в 1990 год ))) для zx spectrum писали игрухи ))
Напиши нейросеть в двоичной коде
Го в троичном
Го в квантовом
Сделаю вид, что понял твоё высказывание)
Можно умереть наверное прежде чем ее написать до конца. Нужна что то выше этого примитива.
А ты знаешь толк в извращениях.
Классное видео. Я считаю что что такой формат очень полезный, особенно для хардкорщиков)
Странно по твоему создатели KolibriOS и API Vulkan хардкорщики, или же люди старающийся сделать быстрее работу железа?????
@@СашСавар-ф5д И то и другое
Действительно интересно. Спасибо
Крутой чел, реально интересно. Очень долго искал подобный контент на ютубе, спасибо!
Не знаю как я попал на это видео, но я все внимательно посмотрел, но ничего не понял, спасибо , интересно было
Эх, даже нас в универе этому учат, а я как бы вообще на квантовой радиофизике
Расценивай это как плюс. Не в каждом вузе так хорошо учат студентов физиков программированию. А ведь это очень востребовано в научных исследованиях. (Сам учусь на физике. Программирование присутствует, но не в таком обьеме)
@@Blendershick та я не спорю, просто наш факультет это электроника с основ, но програмипование кусками, это просто составляющая курса микропроцессорв
@@gorglefterov3532, сделай сталкер 2
Если мы не заглянем в будущее оно кнам не прейдёт
Вот что значить thinking in binary! Я начиная с этого видео подписался на ваш канал, но теперь думаю, что и комментарий не помешал бы! :)
Круто, жду ещё видосов на ассемблерные темы. Хотя из названия я ожидал увидеть очередной тьюториал по MS-DOS DEBUG, но оказалось тоже очень интересно!
На ZX Spectrum все игры таким образом и записывались, заголовок на Basic для инициализации процесса загрузки кода в память с помощью peek и poke, затем простыня из шеснадцатеричных значений.
Даже книжки продавали, где можно было вручную переписать несколько страниц кодов и получить игрушку :)
Отличный материал! Шикарный канал в целом!
Всегда было интересно узнать ответ на этот вопрос. Спасибо, подписался!
когда ты программист ПХП. Смотришь на магию =)
нет, просто вспоминаешь лицей и первые курсы универа... и то, что это было у тебя в прошлом веке )))
@@orkoteg09 Этот прошлый век работает шустрее любой программы написанной на чем угодно, KolibriOS слышал?
@звизданутое солнце говно с мочей
Помню тайком в армии экспериментировал с самомодифицирующемся кодом. Перед выполнением функция дешифруется, выполняется, а потом опять шифруется. Старый трюк, но очень интересный.
Признаки шпионажа
Я всегда об этом думал.Но думал это не реально. Мое уважение Soer
Ну наконец-то я тебя нашел, адекватный канал, с интересным контентом))
В Windows есть функции VirtualAlloc и VirtualProtect, которые позволяют менять флаги страниц и исполнять код от куда хочешь. Еще можно поменять флаги секций. Это возможно, потому что в Винде сектора данных и кода накладываются друг на друга, занимая одно адресное пространство, Винда использует страничную организацию памяти, а страница может быть и исполняемой и записываемой одновременно. Я так модифицировал одну программу, заставляя ее менять условие во время выполнения.
СКОР) А змейка с тетриса в Командной строке)))
Последние несколько дней об этом думал как раз ! )))
Читаешь мысли)
Помню, как во времена Юрского периода я редактировал по мануалам опкоды на Motorola E398 чтобы получить новый фунционал. Хорошие были времена.
Очень интересно, но не чего непонятно
Сначала он в какой-то программе набирает код на языке ассемблера, иструкции, что делать, получает их машинный код в 16-ти ричном формате, потом их загоняет в файл и запускает.
Ещё бы показали как писать на джава шикарно было бы и понимать в том хоть что то
@@MisaNia25, это все есть здесь же, на ютубе. Просто нужно писать соответствующий запрос на поиск, а не комментарий к видео.
Начни с грамматики русского языка, а потом все легче пойдет
@@КонстантинПетров-у5ц всЁ пойдЁт, действительно. Нужно знать русский
Ты крут. Спасибо. Ничего не понял. Но было интересно.
Все, теперь модули для qt писать буду не на js, а в бинарном коде
Что я сейчас посмотрел? Что происходит? Зачем мне это? Какой вообще в этом смысл?
Но, блин, так интересно!
Ого. Это прям как я в 1992 году програмировал на Вектор 06ц в ассемблере
В ТурбоПаскале помнится была директива inline, в которой можно было писать 16-ричные коды и они вставлялись как есть в программу.
Круто! Я только программу "Hello World" в машинных кодах писал.
Еще бы что-то такое =) Супер, спасибо!!
Так раньше так и делали !!! В журнале Радио публиковали исходный код определенных программ. А дед Линуса Торвальдса вообще только бинарники и писал
"да ну нахрен... что ты такое.." 🤣 с уважением!
Иж как исхитрилса... А вообще, очень познавательно!
отлично ждём ролик где вы пишите bare metal программу
10из10 дядька всегда смотрю и очень нравиться
Это как минимум прикольно, когда-то прошел учебник Юрова, сдал зачет и с неимоверным удовлетворением забыл аську как страшный сон. Тем не менее хорошее представление о ассемблере иногда полезно.
Спасибо большое, классные видео
Пролог и Эпилог (push, pop) не требуется
Просто: mov eax, 5 ; ret;
Вот их этих лишних push и pop образуются тормоза у всех программ.
@@Slawaxx Стек в быстрой процессорной памяти, в кэше. Так что пох.
@@КотЧерный-ю1ф В некоторых задачах (типа однобитного цифрового осцилографа) приходится заморачиваться на то, что быстрее:
inc eax
inc eax
или
add eax,2
push pop нужны, первый вариант - mov eax, 5 - это только частный случай!
в общем же случае используется стек, для этого его надо переопределить
Респект автору! Открыл для себя нечто новое)
Особенно тема про непонимание шуток интересная! Можно развернуть её подробнее?
Отличный контент. Спасибо огромное
познавательно. Для общего развития пойдет.
Блин, космос! Открытый!!!
Этис атис аниматис, этис атис аматис... Волшебный кролик!
Блин,он гений! Я то думал он реально на машинном коде будет писать
Это простое использование ассемблера, в код которого передается значения в двоичном формате, хотя все остальные значения, как видно на видео, передаются в шестнадцатиричном формате. Ассемблер, это уже не машинный код. Вопрос, наверное, состоял в том, чтобы писать код чисто по адресации, т.е. чисто бинарные числа.
Не нужно останавливаться - числа нужно вводить с перфокарт
Написание программы в машинных кодах, это когда ты САМ, а не программа, переводишь мнемоники ассемблера в числа, сам рассчитываешь смещения и адреса и вводишь их в файл. Так что, у автора всё по-честному.
@@СергейМоскалёв-с3ь Покажите в видео где там машинный код, написанный автором, а не выведенный компом на экран? Автор использует только ассемблер для данной ОС. push, mov, ret это по вашему машинный код?
Почитайте Википедию что такое машинный код.
ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4
А вот пример, именно программы, написанной машинным кодом из этой страницы:
Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении):
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
@Vitalii Yarema где же это машинный код? Это просто буковки и циферки. И уж точно, прерывание 10h не имеет отношения к машинному коду. Вы запутались в абстракциях.
@@S0ERDEVS Это вы выложили видео о машинном коде, а не я. Не надо переводить стрелки. Машинный код, к вашему сведению, это только двоичные цифры (0 и 1), которые могут быть представлены при написании кода в шестнадцатеричном представлении. Этот код и сохраняется в байтах в файле, который потом выполняется процессором.
Вот и ответьте где у вас на видео машинный код? У вас чистой воды использование инструкций ассемблера. Это, конечно, хорошо, понимать и уметь использовать инструкции ассемблера, но это не машинный код.
Что значит прерывание 10h не имеет отношение к машинному коду?
Запомните, машинный код, это просто всё в цифрах, без слов mov и других.
Помню целые листы в 16 ричном коде в журнале Моделист Конструктор. Уже тогда кодили микросхемки для радиоуправления =)
Чётко и по-полочкам!!!
Ждал пока это кто-то сделает, красава!
очень интересно, и наглядно понял конечно не много, но хоть увидел, что это не магия. В в Хогвард) точно теперь не пойду, буду вас смотреть все-таки безопаснее и комфортнее))
Вот они.... Монстры IT. Чувак, у тебя просто лучший материал!
Весьма познавательно!
грамотный мужик, лайк
Огонь. Больше про асм
Для одних, клиент - это заказчик ПО. а для других - это машина ;-)
Ну за такой контент и лайк не грех влупить...
круто, часто Soer так развлекается для души?)
да просто супер! спасибо за видео
Это шикарно!
Хоть решаемая задача весьма проста, но объяснено все очень доходчиво.
Хочется попросить сорцы этого "интерпретатора" и побольше подобных видео. В идеале серия видео про подобные вещи, в частности, от нажатия кнопки включения ПК до полноценного запуска ОС с нюансами того, что кого и как запускает, откуда знает где лежит и т. п.
без шуток. это было очень интересно. местами на чал понимать ассемблер. который так и не могу понять до сих пор.
Да... Мучение любителей линукс. В досе можно было вроде в .com файл записать голые команды и это запустилось бы. Деталей не помню. Но вроде когда то изучая ассемблер набирал так программы.
я прям "ностальгнул" по тем временам... w32dasm, OllyDbg... много прог было поломано...
Оч хорошо! А про __cdecl, __fastcall и другие можно поподробнее в другом видео (и про то, когда параметров у функции много)?
В душе не е*у кто ты, но ютуб мне тебя порекомендовал. Поздравляю с этим, не всех он продвигает.
Под DOS-ом, теоретически, можно было сделать всё честно в com-файл. Правда, нужно было правильно сделать заголовок com файла, не помню с окончанием, вроде тоже что-то нужно было. А так, если хотелось побаловаться, в редакторе VC писалась программа на asm, а компилятором, входившем в turbo c, всё компилилось в obj, потом в com (до 32 K).
Да Вы - гений!!
Спасибо за видик! С меня подписка.