Это копия, сохраненная 1 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
Книги по RE:
Денис Юричев: "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
Прямая ссылка - https://yurichev.org/b564f46f1c207b2dbc84a2bd4a41ed4c/
Рикардо Нарваха: Введение в реверсинг с нуля, используя IDA PRO https://yutewiyof.gitbook.io/intro-rev-ida-pro/
Введение в крэкинг с помощью OllyDbg https://backoftut.gitbook.io/intro-cracking-with-ollydbg/
https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY Нарваха практический курс по дебагингу
https://www.goodreads.com/shelf/show/reverse-engineering - список книг
Сайты по RE:
http://wiki.yobi.be/wiki/Reverse-Engineering
https://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/
http://www.program-transformation.org/Transform/ReengineeringWiki
http://blog.livedoor.jp/blackwingcat/
https://yurichev.com/blog/
http://wiki.xentax.com/index.php/DGTEFF
https://exelab.ru/
Инструменты для RE:
Дизассемблеры:
1) IDA Pro Torrent Edition 7.2 | 7.0 | 6.8 на выбор. Иногда ограничения версий x86/x64, патчинг, вылеты прилагаются
2) IDA Freeware 7.0 - бесплатная для некоммерческого использования Важные функции/процы/форматы не завезли, саппорт все обращения ксорит побайтово.
3) IDA Home - тем, кто реверсит для хобби 365$ в год, ага. Умеет на выбор PC|ARM|MIPS, обычные и х64. Завезли IDAPython, но забыли Decompiler.
4) Ghidra - главный конкурент IDA Pro, разработка NSA под свободной лицензией. Тормозной Java UI, гипотетические звездно-полосатые анальные зонды в комплекте.
5) Radare 2 | Cutter - консольный + гуй на Qt дизассемблер. Умеет в Ghidra decompiler. Предположительно нужен только клиническим, не умеющим в скачивания торрентов, пользователям альтернативных ОС.
6) Hiew - Hex-редактор и легкий x86|64|arm дизассемблер за копейки. AV-ресечеры текут, вирьмейкеры боятся, поклонники st. Криса грят малаца.
7) Остальное
Отладчики:
1) x64dbg - х86/64 юзерспейс виндовый отладчик с открытым кодом не Olly же в 2020, верно?;
2) WinDbg - родной виндовый дебаггер от MS 32/64 битные приложения, драйвера, анализа аварийных дампов - это все к нему;
Все книги и статьи Криса Касперски (R.I.P.)
https://yadi.sk/d/CxzdM1wyea4WP
https://rutracker.org/forum/viewtopic.php?t=5375505
https://rutracker.org/forum/viewtopic.php?t=272818
Книги по ассемблеру:
"Архитектура компьютера" Э. Таненбаум - https://www.libgen.is
Юров В.И: Assembler http://booksdescr.org/item/index.php?md5=73957AEFEADCB7F0C112DCAED165FEB6
С.В. Зубков: Assembler. Язык неограниченных возможностей.
Randall Hyde: The Art of Assembly Language http://booksdescr.org/item/index.php?md5=9C0F88DC623FCE96A4F5B901ADCE95D3
Сайты по ассемблеру:
Замена почившему wasm.ru- https://wasm.in/ , архив старого сайта https://rutracker.org/forum/viewtopic.php?t=407571 или восстановленный https://vxlab.info/wasm/index.php.htm
https://www.unknowncheats.me/wiki/Assembly
http://asmworld.ru/
https://software.intel.com/en-us/articles/intel-sdm
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/index.html#Top
https://msdn.microsoft.com/en-us/library/afzk3475.aspx
https://conspectuses.blogspot.com/2019/03/fasmg.html
Дизассемблер онлайн:
https://onlinedisassembler.com/
Сборник компиляторов онлайн:
https://godbolt.org/
Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:
http://msdn.mirt.net/
http://terminus.rewolf.pl/terminus/
http://geoffchappell.com/
«Внутреннее устройство Windows» интересующего издания.
Документация Intel:
https://software.intel.com/en-us/articles/intel-sdm
Документация AMD:
https://developer.amd.com/resources/developer-guides-manuals/
Документация Arm:
https://developer.arm.com/documentation/
Разное:
Michael Abrash's Graphics Programming Black Book Special Edition http://www.phatcode.net/res/224/files/html/index.html
http://www.phatcode.net/res/224/files/html/index.html
https://www.agner.org/optimize/
http://booksdescr.org/item/index.php?md5=5D0F6DBC1410E10BC489167AFE8192DF
https://www.cs.cmu.edu/~ralf/files.html
https://www.sandpile.org/
http://ref.x86asm.net/index.html
https://pnx.tf/files/x86_opcode_structure_and_instruction_overview.png
http://www.jegerlehner.ch/intel/
Предыдущие:
№9 https://2ch.hk/pr/arch/2019-11-11/res/1439555.html (

№10 https://2ch.hk/pr/arch/2020-03-11/res/1499956.html (

№11 https://arhivach.net/thread/560997/
№12 https://2ch.hk/pr/res/1748635.html (

№13 https://2ch.pm/pr/res/1837856.html (

> недотред никому не нужен
Именно. Из-за отсутствия нормального треда засирается весь /pr/. Сейчас на борде, так-то, две #asm нити, помимо этой, и тьма вопросов в нюфаг-треде

По моему дилетантскому мнению, я не программист и вообще не касался ассемблера для ПК, идея крайне сомнительная. Если хочешь что попроще, то можешь изучать на примере AVR или чего-нибудь аналогичного. Оно хотя бы относительное современное и при этом совсем простое.
А смысл? Идея в том чтобы учиться по старым 16-битным книгам, а это все уже новое.
>изучать на примере AVR
А где его взять? Это же для микроконтроллеров, на виртуалке не взлетит
Самое тупое это взять https://ru.wikipedia.org/wiki/Proteus_(система_автоматизированного_проектирования) Будет предельно наглядно, но может быть не очень удобно. Или в Atmel Studio симулятор уже встроен. Можно и любой другой симулятор использовать совместно с gdb. Для других микроконтроллеров аналогично.
Зачем учиться мёртвому? Это современные системы с хорошими условиями для программирования на асме.
Ну мало ли есть каноничный материал
>Зачем учиться мёртвому
Под мертвое есть куча годного контента: книги, туториалы, справочники, исходники и т.д. Причем некоторые из них признанная классика, типа старой книги Хайда.
Под фридос же вряд ли что-то лучше найдется чем унылые доки.
В досе будешь работать в 16битном режиме
Спасибо, попробую вкатиться. Правда пока не очень понятно какие именно программы на этом нужно писать.
Читай то, что читают когда хотят освоить веб без асма. Тебе придется использовать апи для доступа к сети, и неважно на каком языке ты к нему будешь обращаться

640x360, 4:03
Это какое-то табу? Вся мяготка асма в сети. Просто везде стандартные - как работает память и push ax. А тут обсуждения как написать свою ОС на асме. Серьёзно? Теперь надо бояться того что ты умный или как?
Высокоуровневые не смогут так сделать, проверил.
А вы тут обсуждаете всякие ос, хуету. Никто вам не заплатит за это, заплатят только за то когда ты поменяешь байтик на нужный.
Если оно работает не так как должно по логике значит это ошибка в твоей логике а не в компьютере
Ты правда не понимаешь? Поясняю. Асм это инструмент для работы с информацией, при помощи асма с информацией можно делать любые манипуляции, вообще любые то есть. Но это конечно же никому не интересно пока это происходит на твоём локальном пк. При всём этом существуют миллионы языков для веба, но они не могут делать любые манипуляции с информацией, как это может делать асм. И вот я вижу что на яве всё расписано для веба, а на асме ничего нет вообще, глушняк. Конечно же юнные вкатывальщики будут вкатываться в яву например, чем в асм.
Ну и поэтому у меня вопрос: а не искусственно ли это табу?
Ты на ассемблере писал хоть раз? У тебя в голове о нем какие-то маняпредставления, поясняю: в асм ты можешь делать все угодно только в режиме ядра, в режиме пользователя ОС будет игнорировать команды вроде in, out, и прочие
Т. е. у тебя есть два варианта работы:
1. Пишешь все в пространстве пользователя, но тут увы придется использовать апи, а условный win32 одинаков и для асма и для си и для джавы и для питона. Уже на этом уровне весь функционал для твоего хацкерства или как ты это в голове считаешь доступен - можешь дрочить пакеты вплоть до сетевого уровня.
На асме никто веб не пишет потому-что это долго, тяжело, много багов и лучше условные кресты какие-то
2. Ты можешь высрать драйвер для работы с канальным/физическим уровнем, драйвер работает в режиме ядра и все команды будут доступны. Но тут созревает вопрос нахуя это нужно, вся задача этих уровней просто передать поток битов и все.
Webassembly?
Пишет про то что можно делать любые манипуляции с помощью ассемблера, следовательно пишет не про реверс а про программирование на нем. Но вот ведь незадача - другие языки вполне себе могут менять байты в потоке байт, вот и любые манипуляции
Сохранение в буфер текста -> Отправка в сокет, эта хуйня есть во всех ЯП
Ты знаешь что такое API?
Тот же спп компиляется в такой же машкод. Всё что ты можешь сделать на асме, можно сделать и на спп.
Ладно, примем по умолчанию что я долбоёб. Как например добавить тэг к тсп пакету, инкапсуляцию там и такие вот всякие штуки. Примеры нужны. Возможно у меня каша в голове, но я не знаю с чего начать её разгребать.
Насколько можно понять твои посты, то что ты хочешь называется драйвер фильтр в шинде.
Я наверно заебал уже, но надеюсь прийти к общему знаменателю.
Зачем на виртуалку, тогда уж на флешку и учиться не по книгам, а как Крис Касперски, по хардкорному - смотреть воздействие каждой инструкции на процессор и память, через DEBUG.COM ;)
Bochs умеет эмулировать практически полноценный процессор, там можно и через debug.com смотреть
>IDA Freeware 7.0
Уже IDA v7.6
>>081146
>1 доллар, епта
Я бы ему сраный аналог бакса в битке/эфире намайнил, но на пулах обычно вывод от $20-30((
Сори, но кэш не стану переводить.
>
>Зачем на виртуалку, тогда уж на флешку и учиться не по книгам, а как Крис Касперски, по хардкорному - смотреть воздействие каждой инструкции на процессор и память, через DEBUG.COM ;)
Современные компы не умеют в ДОС.
Обоснование? Реальный режим с 16 битной сегментной адресацией поддерживается..
Насчет Qemu н знаю, но на bochs успешно заводил оригинальную Windows 95 и там прям четенько второй пень себя ведет, можно любые древние тулзы использовать.
Я на qemu, win 2000 когда то устанавливал, чтобы воспользоваться утилитой для "прошивки" старых Nokia успешно прошил 2100 :)
Аноны, поясните за порядок префиксов в инструкциях х86. Я в курсе что процу похуй на порядок, но меня больше интересует как обстоит дело с компиляторами. У них соблюдается порядок по группам или у всех по разному?
Если сравнивать QEMU и bochs, то последний гораздо лучше поддерживает все тонкости, особенно если это касается реального режима. Т.е., условный бутлоадер с переходом в защищенный режим может отлично работать в QEMU, но падать в bochs и на реальной машине.
Там Гидра10 релизнулась, а мы даже не отпраздновали в треде..
Good night, sweet Ilfak
А интерфейс нормальный уже завезли?

Короч, я все-таки решил вкатываться, хоть анон и не одобрил,
читаю пикрелейтед. Земля мне пухом, братишки.

Копирует в регистр si слово по адресу который хранится в si
Тоже учился по этой книжке в нулевых.
>Good night, sweet Ilfak
1. Делаем фри тулзу
2. Разоряем коммерческого конкурента
3. Прекращаем поддержку фритулзы
4.?????
5. PROFIT
Ну хоть не ЭВМ.
1.Включите компьютер, опишите в тетради те процессы которые наблюдаете на экране
проиграл
возможно я очень слеп, но не могу нагуглить подтверждение или опровержение
> 0x00-0x0F относятся только к бивусу
Исключения процессора обрабатывает каждая уважающая себя ось. Ремапнуть их нельзя. А вот все остальное можно ремапить как угодно.
практика на нём, я вообще не ебу, что такое ассемблер, пока что как обезьянка выполняю, че мне говоритметодчика
Вагную, что учебная программа не менялась как раз с конца семидесятых. А вообще начинать с любого хуй-86 это такое себе, студенты ведь потом будут думать, как утята, что так и должно быть. Блядь, брали бы хотя бы 6502, если такие ретрограды ебаные, там хотя бы архитектура вменяемая да и досконально разобраться можно как сам чип устроен http://www.visual6502.org/JSSim/ Сука, как же я ненавижу рашкинское образование: прогрессивное человечество дало им RISC-V, всё под опен сорс, нахуй, - нет, хочу жрать говно. Пиздец.
Ну так ты и получаешь их так, поток битов. Если взять за некий промежуток то получаешь по одному биту
Я немного не об этом. Даже байт это уже абстракция над битами. Можно ли обойтись даже без байтов?
Бит это абстракция над электрическим сигналом.
Чтобы обойтись без всего - покупаешь процессор, изучаешь его цоколёвку, для интеловских есть в документации. Потом или покупаешь или сам делаешь сокет который будет соединятся с выходами процессора. Вот и все, можешь дрочить процессор электрическими сигналами, разумеется нужно знать элеткротехнические спецификации которые используют процессоры, но и они указаны в интеловских документах
> Бит это абстракция над электрическим сигналом.
Это уже ненужное усложнение. Минимально возможная программная абстракция это бит. А то что электрон это абстракция над какими-нибудь кварками, с точки зрения софта практического применения не имеет.
> and al, 0x01
> mov bl, al
Это байты + ассемблерные инструкции. Бит имеет два значения - ноль и целковый 1. Так вот, вопрос в том, можно ли с процессором работать на уровне битов, или байт (машинный код) это минимум?
а у нас ебланы просто говорят, что мол им не идут современные программы на комп, поэтому дали этуй хуйню, преподша ещё говорила, что мол даже на виндовс 98 пойдёт
>RISC-V
Ну вообще-то набор инструкций в ранних x86 был гораздо проще и он лучше подходит для обучения.
Hy смотря какие цели. Я вообще изучаю асм в эмуляторе спектрума
Не совсем понятно твоё "на уровне". И это байт с машинными командами. Таким образм можно копировать маскировать, устанавливать биты.
Можно, разрешаю.
Гугли команды сдвига, логические и перехода. Все они работают с битами.
В зависимости от ассемблера можно использовать биты и в обычной записи, заменяя префикс 0х на 0b или ставя b в конец константы:
>an al, 01b ; добавить второй по порядку бит
>mov bl, al
Минимально возможная программная абстракция данных - это минимально адресуемая ячейка памяти в данной архитектуре. Примем за минимально адресуемую ячейку памяти байт.
Минимально возможная программная абстракция кода - машинная инструкция, которая храниться как массив байтов некой длины.
С памятью можешь работать как с массивом бит изменяя байты трогая при этом отдельные биты. С процессором только через машинные инструкции, большего на программном уровне ты добиться не сможешь. Можно отправить несуществующие инструкции или недоступные инструкции но он их вроде обычно игнорирует как будто там nop'ом все засрано
> прогрессивное человечество дало им RISC-V,
Это не прогресс. Из-за того, что в RISC-V целиком и полностью состоит из необязательных фич, и из-за того, что он открытый - получится линукс. Куда ни ткни в линуксе: у одного альса, у другого пульса. Хочешь под это писать - страдают все. У третьего пайпвайр - у одного пердит, у второго микрофон не работает, у третьего вообще звука нет.

Ну там же прмеры приведены. По примерам все понятно, даже если в определение тяжело въехать. что за книжка?
Но ведь это и есть математика пятого класса...
Да вабщем та все просто. Для этой задачи подойдет даже питон, что тут думать та? Открываешь файл на чтение, считываешь сообщение в буфер, дальше содержимое буфера отправляешь post запросом в дивы хуивы сосача.

> не могут различаться у amd и intel
Могут отличаться дополнения.
А так да, Интел обосрался с итаниумом и перешёл на 64 от амд.
Антуаны, есть ли среди вас те, кто зарабатывает себе на хлеб с помощью реверса? Если да, то, пожалуйста, поделитесь своей историей и опытом. Как вкатились? Чем обычно приходится заниматься на работе? Как с реверсом обстоит ситуация у нас в СНГ? Есть ли работа на черном рынке? Есть ли перспективы для вката новичкам? Заранее спасибо.
X86-64 = AMD64 ≠ IA64 - это и есть ISA (архитектура набора инструкций дословно, система машинных команд по-русски). У разных моделей процессоров и у разных микроархитектур могут быть разные расширения одной ISA. Например в моделях от AMD (пока) нет векторного расширения AVX-512. У Intel-ских микроархитектур до Хасвелла не было битовых расширений BMI.
Знания в предметной области. Грубо говоря, если собираешься реверсить игру, тебе будет гораздо проще жить, если ты сам что-то писал и можешь заранее представить себе вероятную архитектуру.
ДваЧую. Этот реверсер смыслит в деле. Первый раз вижу.

Есть одна мертвая игра - Квейк ЛутбоксЧемпион, в которой я хотел бы вкурить режим работы спектатора. В этом режиме внизу экрана отрисовывается панелька с ником игрока / советами спектатору, а при определенных событиях в игре или нажатом самим спектатором TAB-e она скрывается.
Предпологаю, что для самой панели есть некий объект с нужным свойством видимости/отрисовки, но как по быстрому это свойство найти в памяти я не представляю - это же не условные ХПшки или XYZ позиция энеми, которые можно просто менять и насканить чит энжином((
Или тут только курить в статике километровые простыни статических анализаторов и иначе никак?

Присмотрите пожалуйста пока за моими табличками указателей, спасибо
Там лежит имя игорька, если что
>В чём твой вопрос?
Как сделать так, чтоб эта панелька не отрисовывалась.
Как по фасту найти условный метод Visibility условного класса BottomPanel не вкуривая несколько десятков мегабайт машинного кода/данных
Найти исходный код игры либо sdk

> Разве префикс 66 не должен работать только в 32-битных программах при w=1 (см. пик 2)?
Да, его для этого сделали. Но этот префикс меняет дефолтный для текущего режима operand size на противоположный (без REX 16/32, с REX 16/64). Для инструкций, не работающих со словами (в том числе для w=0), он игнорируется (если он не переиспользован, как часть инструкции, конечно).
> При этом с 64-битными регистрами это не работает.
use64 не забыл? Работает. В 64-битном режиме:
48 83 с0 03 - add rax, 3 ; REX
48 66 83 с0 03 - add ax, 3 ; REX, size override
83 c0 03 - add eax,3 ; нихуя
66 83 c0 03 - add ax,3 ; size override
Найдти сходства и отличия сам. А в 16/32 битных режимах REX в принципе не существует, поэтому никаких тебе 64-битных регистров.
>use64 не забыл? Работает. В 64-битном режиме:
Я к тому, что если у меня use16, почему я вообще могу пользоваться 32-битными регистрами? 64-битными не могу, это понятно, но 32-битные - пожалуйста. Если бы было use32, я бы аналогично мог пользоваться 64-битными регистрами?
>48 83 с0 03 - add rax, 3 ; REX
>83 c0 03 - add eax,3 ; нихуя
>66 83 c0 03 - add ax,3 ; size override
Получается в 64-битном режиме по умолчанию команда ADD работает с 32-битными регистрами, а для уменьшения/увеличения размера операнда используются разные префиксы?
>>124035
Если я правильно понял, 16-битная программа, содержащая, например, команду
6683C003 = add eax,3
может быть запущена только на 32-битном процессоре, потому что этой фичи с префиксом изменения размера не было в 16-битных процессорах, как и extended-регистров? Хотя казалось бы, 16-битная программка же.
386+, да. Если это имеет значение, можно детектить проц и делать фолбек какой-то.
> Если бы было use32, я бы аналогично мог пользоваться 64-битными регистрами?
Вот этот вопрос пропустил. Нет. 32-битные фичи - это расширение системы команд 16-битных процев с практически полным сохранением набора инструкций (выкинули две с половиной инструкции, притом недокументированные - гугли loadall). 16-битного кода тогда уже было написано дохуя, а памяти еще мало, поэтому существует 16-битный защищенный режим и прочие извращения. И так как по большей части разница между 16-битным и 32-битным режимами всего в одном бите дескриптора сегмента, то интелу ничего не стоило сделать так, чтобы 66/67 работали в обе стороны. От этого ничего не сломалось.
Для 64-битного расширения набора команд AMD поступила по-другому: взяла и выкинула сразу пачку разных однобайтовых инструкций, в том числе и inc/dec reg (40-47/48-4f соответственно), сделав из них новый префикс (REX). Точнее, так как у REX 16 возможных значений, то это по идее семейство из 16 REX-префиксов, ну да и похуй. И вот тут уже надо было как-то отличать, декодировать ли байты по-старому или это префикс. И поэтому только в 64-битном (long mode) режиме декодер считает, что это REX или нихуя (PUSHA, например, не декодируется), а в остальных (legacy modes) он работает по-старому и декодирует в привычные инструкции.
> Получается в 64-битном режиме по умолчанию команда ADD работает с 32-битными регистрами,
Да. А чтобы указать 64-битный регистр вместо 32-битного, используется бит REX.W (вот это самое 8 в 48). Чтобы указать один из новых регистров (всякие там dil, r9d или r11) в разных частях инструкции, используются остальные три доступных бита REX. Но REX доступен только в лонгмоде, поэтому без лонгмода ты никак до 64-битных регистров не доберешься.
Вроде стало немного понятнее, спасибо
Все очевидные вещи уже перепробовал, с раундовыми константами поиграл, сдвиги и S-боксы поперебирал - нихуя, не выходит каменный цветочек. Надо нырять в математику, но не очень хочется.
Может, посоветуете чего? inb4 глаза разуй
Ассемблер - это сверхбыстрые вставки C/C++ при разработке значимых от железа прог. Это ОС, драйвера и прочее.
И конечно же это ракеты и самолёты. Баллистические вычислители онли АСМ
Как хобби разве что. Зарабатывать не выйдет.
Но асм всегда будет, он необходимая основа любого компилятора.
Выбирай FASM и всё.
Ещё научись юзать Olly, функции CreateFile, CreateFileMapping.
Ты считай бог в асме. Остальное приложится.
> Ещё научись юзать Olly, функции CreateFile, CreateFileMapping.
Я пока только 16-битные досовские программы пишу)
Да ладна. Add ax,bx понимаешь, add eax,ebx тоже самое. Джамп, проц, push одинаковые. Делай заготовку для 32битного приложения и вперёд. Функцией CreateFile создаёшь файл, функцией CreateFileMapping отображаешь файл в память, своей прогой делаешь с этими данными всё что угодно и выгружай через новый CreateFile результат. Вперерывах написания кода, загружаешь его в olly, проверяешь как он работает, писать весь код сразу не обязательно, просто поставь брэкпойнт где закончил и проверяй этот написанный участок кода, чтобы делал точно то что ты хочешь.
Зачем вообще учить ассемблер x86, если по нему в РФ ноль вакансий?
Обычно требуется Cortex-M и прочий ARM.
> Зачем вообще учить ассемблер x86, если по нему в РФ ноль вакансий?
Блядь, с какими же довенами я сижу на одной доске. Чтобы понимать, блядь, как там все ниже сишки работает. Чтобы научиться векторизации. Чтобы реверсить. Чтобы написать свою крохотную ОС. Все это нужно для общего фундамента, блядь. Ебаные вкатыши, нихуя не умеют, нихуя не интересно, лишь бы вакансии под их говностек были. Тьфу, блядь.
>Все это нужно для общего фундамента, блядь. Ебаные вкатыши, нихуя не умеют, нихуя не интересно, лишь бы вакансии под их говностек были.
Двачую. Зачем вообще идти в программисты с таким подходом к делу? Если нужны тупо бабки пусть идут в продаваны, толку больше будет.
Есть slz decompressor, мне надо написать slz компрессор, чтобы запихивать изменённые буквы и ссылки на эти буквы в архив. В описании указано 2/LZSS+RLE. При slz0 в куске ничего не меняется, тупо добавляется заголовок с размером куска. При slz1 вставляется двухбайтная ссылка на строку, где первые 4 бита +3(если там 0, то размер 3 байта) размер строки, это и есть LZSS я понимаю. slz3 нету.
slz2 какая-то белиберда. На пикчах выделил заголовок, ff - оставлять как есть, ef - 1110 1111 то есть пятый байт это двухбайтная ссылка на что-то - 00 f1, в несжатом куске это - 00 00 00 00. При чём есть какие-то странные повторы 8с 00 00 00 00.
Отрываю от сердца.
macro save MemPointer{mov dword[MemPointer],eax}
format PE GUI
entry start
include 'win32wx.inc'
section '.code' code executable
start:
invoke GetOpenFileName,GeneralOpenFileName
test eax,eax
jz mExit
invoke CreateFile,\ ;
FileNameString,\ ;pointer to name of the file
GENERIC_READ+GENERIC_WRITE,\ ;access (read-write) mode
0,\ ;share mode
0,\ ;pointer to security attributes
OPEN_EXISTING,\ ;how to create
0,\ ;file attributes
0 ;handle to file with attributes to copy
save FileHandle
invoke GetFileSize,[FileHandle],0
save FileSize
invoke GlobalAlloc,GMEM_ZEROINIT+GMEM_MOVEABLE,[FileSize]
save MemoryHandle
invoke GlobalLock,[MemoryHandle]
save MemoryPointer
invoke ReadFile,[FileHandle],[MemoryPointer],[FileSize],FileSize,0
mov edi,[MemoryPointer]
mov al,'s'
mov ecx,[FileSize]
ContinueLoop:
repne scasb
jecxz EndOfFile
mov byte[edi-1],'$'
jmp ContinueLoop
EndOfFile:
invoke SetFilePointer,[FileHandle],0,0,FILE_BEGIN
invoke WriteFile,[FileHandle],[MemoryPointer],[FileSize],FileSize,0
invoke GlobalFree,[MemoryHandle]
invoke CloseHandle,[FileHandle]
mExit:
invoke ExitProcess,0
section '.data' data readable writeable
GeneralOpenFileName OPENFILENAME 76,\;--------------------------------------------------------lStructSize
0,\;--------------------------------------------------------hwndOwner
0,\;--------------------------------------------------------hInstance
0,\;--------------------------------------------------------lpstrFilter
0,\;--------------------------------------------------------lpstrCustomFilter
0,\;--------------------------------------------------------nMaxCustFilter
0,\;--------------------------------------------------------nFilterIndex
FileNameString,\;-------------------------------------------lpstrFile
512,\;------------------------------------------------------nMaxFile
0,\;--------------------------------------------------------lpstrFileTitle
0,\;--------------------------------------------------------nMaxFileTitle
InitDir,\;--------------------------------------------------lpstrInitialDir
0,\;--------------------------------------------------------lpstrTitle
OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_EXPLORER,\;---Flags
0,\;--------------------------------------------------------nFileOffset
0,\;--------------------------------------------------------nFileExtension
0,\;--------------------------------------------------------lpstrDefExt
0,\;--------------------------------------------------------lCustData
0,\;--------------------------------------------------------lpfnHook
0;----------------------------------------------------------lpTemplateName
FileNameString TCHAR 512 dup (?)
InitDir TCHAR 'C:\Trash\asm\New program'
FileHandle dd ?
FileSize dd ?
MemoryHandle dd ?
MemoryPointer dd ?
section '.idata' import data readable writeable
library kernel32,'kernel32.dll',\
comdlg32,'comdlg32.dll',\
user32,'user32.dll'
include 'api\kernel32.inc'
include 'api\comdlg32.inc'
include 'api\user32.inc'
Отрываю от сердца.
macro save MemPointer{mov dword[MemPointer],eax}
format PE GUI
entry start
include 'win32wx.inc'
section '.code' code executable
start:
invoke GetOpenFileName,GeneralOpenFileName
test eax,eax
jz mExit
invoke CreateFile,\ ;
FileNameString,\ ;pointer to name of the file
GENERIC_READ+GENERIC_WRITE,\ ;access (read-write) mode
0,\ ;share mode
0,\ ;pointer to security attributes
OPEN_EXISTING,\ ;how to create
0,\ ;file attributes
0 ;handle to file with attributes to copy
save FileHandle
invoke GetFileSize,[FileHandle],0
save FileSize
invoke GlobalAlloc,GMEM_ZEROINIT+GMEM_MOVEABLE,[FileSize]
save MemoryHandle
invoke GlobalLock,[MemoryHandle]
save MemoryPointer
invoke ReadFile,[FileHandle],[MemoryPointer],[FileSize],FileSize,0
mov edi,[MemoryPointer]
mov al,'s'
mov ecx,[FileSize]
ContinueLoop:
repne scasb
jecxz EndOfFile
mov byte[edi-1],'$'
jmp ContinueLoop
EndOfFile:
invoke SetFilePointer,[FileHandle],0,0,FILE_BEGIN
invoke WriteFile,[FileHandle],[MemoryPointer],[FileSize],FileSize,0
invoke GlobalFree,[MemoryHandle]
invoke CloseHandle,[FileHandle]
mExit:
invoke ExitProcess,0
section '.data' data readable writeable
GeneralOpenFileName OPENFILENAME 76,\;--------------------------------------------------------lStructSize
0,\;--------------------------------------------------------hwndOwner
0,\;--------------------------------------------------------hInstance
0,\;--------------------------------------------------------lpstrFilter
0,\;--------------------------------------------------------lpstrCustomFilter
0,\;--------------------------------------------------------nMaxCustFilter
0,\;--------------------------------------------------------nFilterIndex
FileNameString,\;-------------------------------------------lpstrFile
512,\;------------------------------------------------------nMaxFile
0,\;--------------------------------------------------------lpstrFileTitle
0,\;--------------------------------------------------------nMaxFileTitle
InitDir,\;--------------------------------------------------lpstrInitialDir
0,\;--------------------------------------------------------lpstrTitle
OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_EXPLORER,\;---Flags
0,\;--------------------------------------------------------nFileOffset
0,\;--------------------------------------------------------nFileExtension
0,\;--------------------------------------------------------lpstrDefExt
0,\;--------------------------------------------------------lCustData
0,\;--------------------------------------------------------lpfnHook
0;----------------------------------------------------------lpTemplateName
FileNameString TCHAR 512 dup (?)
InitDir TCHAR 'C:\Trash\asm\New program'
FileHandle dd ?
FileSize dd ?
MemoryHandle dd ?
MemoryPointer dd ?
section '.idata' import data readable writeable
library kernel32,'kernel32.dll',\
comdlg32,'comdlg32.dll',\
user32,'user32.dll'
include 'api\kernel32.inc'
include 'api\comdlg32.inc'
include 'api\user32.inc'
Критика.
>invoke ReadFile,[FileHandle],[MemoryPointer],[FileSize],FileSize,0
ReadFile лучше не использовать, это устаревшая жопа, вместо этого юзать CreateFileMapping и MapViewOfFile. Тогда весь файл подгружается в оперативку, там меняешь что нужно. Просто я именно это советовал выше.
Не буду врать, когда я это писал году в 2009 где-то, уже был маппинг и я осознанно от него отказался, потому что слишком сложно для школоло.
Сейчас это уже история и переделывать точно не стану
Там главное fasm установить и win32api.chm и includes скачать (некоторых констант из gdi32.dll нет в стандартном fasm), остальное по ходу дела гуглится.
Кстати, в стандартной поставке fasm есть отличный и короткий документ с полным описанием как вкатиться. Очень рекомендую для начала. Если нужно на русском, загугли, вроде переводы кто-то делал.
> ReadFile лучше не использовать, это устаревшая жопа, вместо этого юзать CreateFileMapping и MapViewOfFile
ты токой MapViewOfFile, а юзер токой дерг флешку, и ты токой ой, программа допустила недопустимое, выполнила невыполнимое. хотите рассказать об этом своему психиатрумайкрософту? А вот ReadFile тебе просто ошибку вернет.
Нет, у отображений ограниченная область применения. Чаще всего Read/WriteFile подходят лучше. Особенно асинхронные.
У тебя там исходник в первом скриншоте, зачем ты занимаешься художественной раскраской хексдампов?
*не мешает
Это лженаука.
Чё то мутный какой-то исходник, слишком короткий, больше похоже на то, что только один режим там.(Не знаю С)
Я пошёл трудным путём) Изучаю как игра распаковывает этот кусок, распакованные данные совпадают. Но чёто пипец сложно, а там всего 15 строк..
На собесе был вопрос "Что происходит на низком уровне когда вызывается винапи функция". Я начал отвечать про конвенцию вызово, стек, регистры, ленивую линковку, но всё общее для винды и линукса. Даже примеры в для линукса приводил типа гот плт таблицы. А меня спрашивали конкретно про винду. Типа стэк везде стэк. Плт таблица в винде по-другому назвается и не так работает. В итоге интервьюер заебался меня поправлять и сказал хватит. А как всё-таки надо было правильно ответить? Гугл говорит, что в винде ничего особеного для вызова винапи функций нет и они вызываются почти так же как везде
Может, от тебя не только про асм хотели услышать, но и про оси? А ты чисто в асм ушел + поплыл.
Ну хуй их знает, что они хотели от тебя. Если конкретно про вопрос о вызове Windows API, то: call и конвенции, нахуй (не) нужны thunks (jmp IAT), API sets и форварды, wow64, трансляция A/W, вызов FuncEx из Func, нейтив апи-сисколл-KiFastSystemCallRet. Это вызов. Ну и линковка, если тебе вперлось про нее рассказать: директории импорта/экспорта (ординалы/форварды/bounds imports/delayed imports), dll search path (altered, KnownDLLs), activation contexts и манифесты, чего-нибудь про лоадер и PEB, наверное.
Да ебланы какие-то, не переживай, скоро развалится их говноконтора рога и копыта. Меня тоже однажды спрашивали какими способами можно отформатировать винт. Короче, судьба тебя отвела от ненужных проблем. немного припекло

540x960, 1:53

Ошибка с уровнем исполнения проги. Ему нужно ядро, а ты видимо пытаешься запустить досом, что на 1 или 2 уровня выше. Пик прилагается.
https://www.youtube.com/watch?v=Ei82hiqIqn0
https://www.youtube.com/watch?v=xPSEBMEw-mw
https://www.youtube.com/watch?v=H2AtpmdhLmA
https://www.youtube.com/watch?v=fDfkk6m3hjg
https://www.youtube.com/watch?v=dpPs4mj0ilw
https://www.youtube.com/watch?v=V-LMRCAFu38
https://www.youtube.com/watch?v=s3L8Nf5M2Oo
https://www.youtube.com/watch?v=M0BUvLC7zQM
https://www.youtube.com/watch?v=Th5XWf1NZfA
https://www.youtube.com/watch?v=CVs-ZYhm2v4
https://www.youtube.com/watch?v=Q3XdcukuNmw
https://www.youtube.com/watch?v=GvGho6RX5Dc
Не могу понять, ты всерьёз объясняешь или нет, но ладно. Это всё понятно. Другое дело, что гугл даёт практически нулевые результаты что по "TNT Embedded Kernel", что по "ETS Kernel", да и про утилиту DOSBOOT не знает. Это какая-то древняя RTOS. А хотелось бы узнать больше, прежде чем лезть дампить память железки (с процессором i386, ёпта), на которой это всё работает.
Мы тут в байтах ковыряемся, ты можешь это понять? А ты какие -то ошибки вбрасываешь. Спасение утопающих - дело рук самих утопающих!
Чел годно ответил, ещё и картинку хорошую прицепил.
Картинка никак к досу и риалмоду не относится. В риалмоде нет защиты, а значит нет и колец. Алсо, картинка показывает влажные фантазии интела в восьмидесятых, в реальности же кольца 1 и 2 практически никем не использовались.
Тем не менее никто из-под доса не запрещал самопальный маняпротектед использовать, все экстендеры памяти это делали и было куча протектедных движков вроде dos4gw под которыми всякие думы и квейки крутились. Очень много дос софта юзало протектед.
Так проге нужны кольца, а он под досом запускает, там вообще .exe. Про это и речь. Ему надо гуглить что-то вроде запуск PE под досом.
Нахуя тебе асм??? с сетью работаьь лучше на Си.
Нет вакансий. Пиздец, ещё вчера читал отзывы, там пизда удивляется - почему такую тяжёлую работу работают только женщины. Ну вот, я пришёл, но там 100% "по блату" взяли какую-то пизду.
Есть такая хуйня - непредсказуемость будущего. Я с асмом на вы ещё со спектрумовских времён. Так вот, в нулевых асм был посмешищем, c++ ну вроде ок. Сейчас крен сдвинулся и вроде С уже норм, а asm для реверса можно и нужно юзать. Считаю что крен этот сдвигается потому-что всё что выше это фантики, общество потихоньку начинает понимать. А суть то в том, что только asm работает с инфой непосредственно, без надстроек. А инфа уже сегодня имеет ценность, а что будет завтра?
>всё что выше это фантики
Тоже охуеваю от того, что большинство вопросов в айти - как подключить ту или иную либу, а не об архитектуре.
>А инфа уже сегодня имеет ценность, а что будет завтра?
Многое программисты так до конца жизни и не узнают, что означает буква ай в слове айти.
Мимо
подитожу
В асме нет девственников. Прими и умойся.
http://www.mcst.ru/elbrus_prog
И как с такой документацией гордиться отечественной архитектурой?

Ну, тут хотя бы опкоды расписаны. ISA эльбрусов потихоньку реверсят энтузиасты, мцст то ли не хочет, то ли боится нормальные доки публиковать
И как этот документ поможет документу выше?
Это не лаба, решаю для себя, пожалуйста не бейте
https://pastebin.com/F4t4Bpfd
Можешь объяснить, как может быть несколько пар с максимальным расстоянием. Не понимаю.
Я бы сложил x+y каждой точки, с какой точкой самая большая разница, то и есть максимальное расстояние. Но это не точно.

Надежнее было бы посчитать гипотенузу через fsqrt. Только по итогу получится, что работает весь алгоритм с перебором каждой точки к каждой другой точке даже медленнее, чем n^2
> Можешь объяснить, как может быть несколько пар с максимальным расстоянием. Не понимаю.
Вот например даны точки:
0. (0, 0)
1. (1, 7)
2. (-1, 7)
Расстояние между 0 и 1 максимальное и равно расстоянию между 0 и 2. В ответе две пары: 0-1 и 0-2.
Нет, не так
Щас в полусонном слстоянии. Если точки с корами 100,10 и 200,10. Получится тогда по гипотенузе найти?
Ну типа да, расстояние считается по формуле sqrt((x2 - x1)2 + (y2 - y1)2). Но я, естественно, сравнивал квадраты расстояний, чтобы не считать корень, и остаться в целых числах. На глаз код, вроде, правильный, но что-то не так, не могу понять.
https://pastebin.com/F4t4Bpfd
А, забыл легенду. Три точки, три операции (вызова функции для расчёта длины на самом деле) 4 точки - шесть операций и т.д.
В целом, число вызовов совпадаёт с числом рёбер
Жоский код если честно
@@:
inc ecx
cmp ecx, нужное значение
jz @b
Что не так в этой конструкции? Зачем её усложнять?
Это плохая конструкция. Цена одна команда, а код нечитабелен - уменьшение ecx, от какого значения? Начинаешь искать этот мув, а точно это тот мув который нужен? Хорошо бы ещё убедиться что нет других mov ecx.
По какой-то причине не сработал джамп, тогда в ecx ffffebcd. Из-за этого значения дальше весь код по пизде идёт и показывает хуй знает что. А так не сработал.. и у тебя в есх вместо 10 оказалось 500, и ты видишь что весь остальной код работает правильно, просто джамп не сработал.
>Цена одна команда, а код нечитабелен
Одна команда из четырёх. Поэтому код сейчас и генерирует компилятор, чтобы читабельность не была фактором.
Это же не равно 25% кода. У тебя один, два цикла будет, зато сам не будешь теряться в своём коде. Ну если много циклов, ну оптимизируй потом под dec ecx.
Зато конструкция с inc позволит тебе творчески подходить к написанию кода, в этот цикл будешь вставлять переход на другой итд. А так, как будто сам себе рамки выставляешь этим mov ecx. Но рамки эти на самом деле написаны в учебнике.
Хороший код - оптимальный код.
Чел, ты просил не усложнять. Вот я тебе и упростил. Твои проблемы с чтением программ и поиском мувов, твои проблемы с отладкой и неработающими переходами - твои проблемы.
У меня все заебись и если программе не нужны значения от нуля, я пишу именно через декремент. Так проще и понятнее, что хотел сказать автор программы, а именно - это просто фиксированный цикл ради цикла, арифметики с индексом скорее всего не будет, косвенной адресации к массивам не будет почти наверняка, просто прогон кода N раз.
А у тебя нужно весь цикл прочитать чтобы узнать, зачем тебе нужен именно такой набор индексов. Понятно, что цикл придется читать в любом случае, чтобы понять его работу, но в твоём случае это придется сделать на один раз больше.
Не знаю кому ты там пишешь хороший код, я пишу для себя.
>>135421
Да оно теоретически то все будет работать, просто у самого было такое, получалось не очень.
Как-нибудь до джампа более точно описать условие, чтобы только два варианта было - да нет. Например, если получается отрицательные числа и положительные, то просто прибавить что-нибудь чтобы всегда получались положительные и проверять одно условие в положительных числах.
Короче, я понял, где ошибка. Я пытаюсь посчитать (x0 - x1)^2. x0 и x1 это signed word в диапазоне от -2^15 до 2^15-1. Вычитаю одно из другого, не проверяя, какое из них больше. По идее, должно получиться значение от -(2^16-1) до 2^16-1, но так как результат вычитания шестнадцатиричный, получается черт знает что. Значит мне нужно проследить, чтобы всегда меньшее вычиталось из большего. Тогда я получу значение от 0 до 2^16-1, и его уже необходимо воспринимать как unsigned. Дико тупая ошибка, конечно. Попробую исправить.
Сработало! Достаточно было добавить
jge @f
neg ax
@@:
сразу после вычитания. Даром пришлось еще чинить основной цикл, так как relative jump out of range. Просто заменил loop .lp1 на
dec cx
jcxz @f
jmp .lp1
@@:
Благодарю за внимание.
> Вот я реверснул файл на си
Ты реверснул не файл на си, а предварительно скомпилированный исполняемый файл.
Ну хз, например прога на питоне требует реги, вот это например, но это гепотетически, просто пришло в голову.
Программа на питоне не является исполняемым файлом. Когда ты запускаешь программу на питоне, на самом деле ты запускаешь python.exe.
Ну, во-первых, import dis, во-вторых, есть и внешние дизасмы. А для случаев, когда оно выполняется отдельным питоном, в котором опкоды поменяли местами, всегда можно написать свой.
Ты можешь, в теории, запустить программу в дебаггере, и посмотреть, что делает питон на уровне машинного кода. Но зачем?
Это неправильная интерпретация байткода питона в виде x86-64 кода. Ты точно так же можешь какой-нибудь жипег ему подсунуть, и он тоже это дизассемблировать будет, только кодом оно от этого не станет.
Ой бляяя, не байткода даже. Ты ему текстовый исходник скормил, лол?
Патчить тоже можно, но нахуя?

Байткон питона нельзя дизассемблировать в привычном смысле этого слова. Максимум, что можно сделать, это получить на выходе расшифровку байткода, что собственно и делает dis (см. пикрил).
> потом этот байткод можно развернуть обратно в исходник, очевидно же.
Чел хочет из кода на питоне получить ассемблерный код.
По-моему, он просто нуб и сам точно не понимает, что говорит, лол. Но смысла спорить нет, может и сам ответить.
>в привычном смысле этого слова
Дизассемблировать, то есть преобразовать машинный код в ассемблерный код, что не понятно? Смотри на контекст обсуждения.
Для виртуальной машины питона машинный код - байткод. Мы его преобразовываем в читаемое представление. Это называется дизассемблированием. Можешь плугин для радара или иды написать, чтобы то же самое смотреть там. У них уже есть, например, плагины для джавы, и у джавы тоже виртуальная машина, поэтому дизассемблер показывает байткод JVM. Если у тебя собственный мир с собственной терминологией, нужно предупреждать сразу.
>устроили тут непонятно что
Не все умеют хорошо объяснять. Особенно когда непонятно, какое у человека представление о предмете вопроса.
питон это интерпритируемый язык, он не компилируеться в исполняемый файл. если хочешь "реверсить" прогу на нем, просто открой в текстовом редакторе исходный файл .py
Охуенчик
До слёз.
зависит от определения истины в даном контексте
Интерфейс для рептилоидов, кривые лоадеры, кривой отладчик, нет поддержки проектов в привычном смысле слова, зато есть эмодзи-хексдамп, снежинки и ванильные цитатки при старте. Но если ничего другого нет, пользоваться можно.
Я там сжульничал немного, поставил брейкпоинт, скриптами в иде пропатчил память с буквами. Чтобы всё это закатать на диск надо написать архиватор, а это фак,фак,фак.... Или найти такой же архиватор, или я долбаёб и есть способ проще.
Ты имеешь ввиду не пригоден для промышленных масштабов в лабораториях касперского? Но там комунити, можно писать на питоне какие-то дополнения, и в целом норм доки.
Только без снобизма и отсылки к тоннам книг.
При реверсе файлов на что следует обращать внимание, на аномалии, или что-то еще. Или все зависит от цели. Хочу попрактиковаться на крэксми. Скачал файл. В подобных примерах, надо типо найти пароль или нечто подобное. Есть алгоритмы или нечто подобное чтобы искать. Хз как сформулировать, но пусть пока будет так.

>самый низкоуровневый
> - Посоны, а как начать писать на Ассемблере?
> - Ну, короч, ставишь досбокс...
Это такой тралленк, да?
Я хотел бы понять суп ре без умствований. Вот есть файл, с чего начать, ну пусть будет крексми. В манах того же радара просто команды. Но я хотел бы понять логику, с чего начать, некий алг что ли. Можно же смотреть в книгу и видеть фигу. Надо знать что искать к примеру.
Что по-твоему значит низкоуровневый, лол?
Создание программ на ассемблере для доса отличается только тем, что доступен только реальный режим процессора, и плюс дос предоставляет некоторые функции, и всё. Ты по-прежнему работаешь с регистрами непосредственно, и твоя программа по-прежнему состоит из ассемблерных инструкций. Я еще понимаю, если бы речь шла о формате PE, но этого я не понимаю.
Нет, я хотел вкатиться в ассемблер, а мне сказали, что современный ассемблер теперь игрушечный и в каком-то эмуляторе запускается. Дико с этого проиграл и решил вкатиться во что-то другое.
Ты спрашиваешь как начать писать на ассемблере - тебя закономерно отправляют в лягушатник. Вопросы?
x86 ещё относительно высокоуровневый. А вот на всяких VLIW'ах с регистровым окном заебёшься писать
То, что это сложнее, еще не значит, что оно более низкоуровневое. Архитектуру можно было бы назвать более низкоуровневой, если бы x86 инструкции было возможно разложить на более элементарные команды для данной архитектуры.
Можешь начать с тестирования, там макачьих гайдов полно.
Реверсинг, пентест и тестирование это одно и то же, просто чуть под другим углом. Но всё учит как бы ебануть что плохо прикручено.
>если бы x86 инструкции было возможно разложить на более элементарные команды
Разве за тебя это не делает микрокод? Ну и вообще, по такой логике, мипсы окажутся самой лёгкой архитектурой просто потому что у них команд меньше и приходится всё расписывать вручную, что в CISC'ах уже давно делается одной инструкцией
Ищи строки- это самый простой способ
Строго говоря, нельзя, сравнивая две разные архитектуры, сказать, какая из них более низкоуровневая. Но если две архитектуры взаимозаменимы, то можно условно сказать, что более высокоуровневая та из них, инструкции которой во второй архитектуре реализуются последовательностью команд. Напимер, какая-нибудь архитектура, типа x86, но в ней, например нет инструкций, типа push, pop и т.п.
Получается, надо взять 7 байт по смещению -6. КАК? Откуда должен взяться седьмой байт, он потерян при сжатии.
Но разжимается. Просто я когда писал, то сделал джамп если коретка доходит до текущей позиции, потом сравниваю полученный результат с исходным и охуеваю.
MBR же. Надо просто разместить в правильном месте и чтобы он(mbr) указывал на твой код.
Биос читает mbr, mbr читает твой код.
>Надо просто разместить в правильном месте
А как? Вот я ассемблировал свой код, получил code.bin на выходе. Что с ним делать? Я пробовал genisoimage -o code.iso code.bin. Загрузил этот образ в virtual box: он говорит no bootable medium found. В чём я неправ?
Открой в hex-редакторе образ системы, найди там mbr. Почитай где он должен быть расположен(в образе наверно будут доп.заголовки всякие). Скопируй в свой образ, измени стартовый адрес кода на свой код.
А что, биос мне тоже ничего не должен? Какой драйвер? Мне всего-то нужен текстовый режим 80x25.
Возможно ты прав, не проверял. Хорошая идея у тебя, do it.
В свою молодость я загружал bmp файл из флешки прямо в видеопамять. Vesa режимы рулят.
К слову загрузку секторов кода я так и не осилил, так что код там совсем маленький.
Поэтому нужен код и скриншот первого сектора. Остальное не поможет.
Скину то что нашел у себя в закромах. Давно уже не помню что именно делают эти int13 вызовы.
А то у нас совсем тред без кода почему-то. Так неинтересно.
;fasm boot.asm
Use16
org0x7C00
cli
mov ax,0xb800
mov ds,ax
xor si,si
mov ax,0x0700
mov ah,41h
mov dl,80h
mov bx,55aah
int 13h
mov ax,0x0730
jc @f
mov ax,0x0731
@@:
mov [si],ax
mov ah,42h
mov dl,80h
mov si,0
mov ds,si
mov si,dap
int 13h
mov ax,0xb800
mov es,ax
jnc @f
xor si,si
mov word[es:si],0x0735
@@:
xor si,si
mov word[es:si],0x0736
mov di,cop
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
jmp $
dap:
db 10h
db 0
dw 1
dw cop
dw 0
dq 1
cop:
dw 0x0700,0x0730,0x0731
Поэтому нужен код и скриншот первого сектора. Остальное не поможет.
Скину то что нашел у себя в закромах. Давно уже не помню что именно делают эти int13 вызовы.
А то у нас совсем тред без кода почему-то. Так неинтересно.
;fasm boot.asm
Use16
org0x7C00
cli
mov ax,0xb800
mov ds,ax
xor si,si
mov ax,0x0700
mov ah,41h
mov dl,80h
mov bx,55aah
int 13h
mov ax,0x0730
jc @f
mov ax,0x0731
@@:
mov [si],ax
mov ah,42h
mov dl,80h
mov si,0
mov ds,si
mov si,dap
int 13h
mov ax,0xb800
mov es,ax
jnc @f
xor si,si
mov word[es:si],0x0735
@@:
xor si,si
mov word[es:si],0x0736
mov di,cop
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
jmp $
dap:
db 10h
db 0
dw 1
dw cop
dw 0
dq 1
cop:
dw 0x0700,0x0730,0x0731
Вот была же любовь к табам раньше.
boot.asm
Use16
org 0x7C00
cli
mov ax,0xb800
mov ds,ax
xor si,si
mov ax,0x0700
mov ah,41h
mov dl,80h
mov bx,55aah
int 13h
mov ax,0x0730
jc @f
mov ax,0x0731
@@:
mov [si],ax
mov ah,42h
mov dl,80h
mov si,0
mov ds,si
mov si,dap
int 13h
mov ax,0xb800
mov es,ax
jnc @f
xor si,si
mov word[es:si],0x0735
@@:
xor si,si
mov word[es:si],0x0736
mov di,cop
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
jmp $
dap:
db 10h
db 0
dw 1
dw cop
dw 0
dq 1
cop:
dw 0x0700,0x0730,0x0731
Вот была же любовь к табам раньше.
boot.asm
Use16
org 0x7C00
cli
mov ax,0xb800
mov ds,ax
xor si,si
mov ax,0x0700
mov ah,41h
mov dl,80h
mov bx,55aah
int 13h
mov ax,0x0730
jc @f
mov ax,0x0731
@@:
mov [si],ax
mov ah,42h
mov dl,80h
mov si,0
mov ds,si
mov si,dap
int 13h
mov ax,0xb800
mov es,ax
jnc @f
xor si,si
mov word[es:si],0x0735
@@:
xor si,si
mov word[es:si],0x0736
mov di,cop
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
inc si
inc di
inc si
inc di
mov ax,[ds:di]
mov [es:si],ax
jmp $
dap:
db 10h
db 0
dw 1
dw cop
dw 0
dq 1
cop:
dw 0x0700,0x0730,0x0731
Есть бинарь (.dll), ижектится в другой, вешает разные хуки. Какие-то я нашел, но подозреваю что не все
в .text есть портянка кода, я нашел место где уже .dll получила данные из основного бинаря, немного их обработала, после места еще один обработчик, и вызов хука чтобы положить обратно измененные. Т.е.:
- какой-то хук
- какой-то код обрабатывающий полученное
- место которое я обнаружил, если поставить бряку - она триггерится
- еще обработчик
- найденный мной хук чтобы собственно вернуть взад
Как функцию ида то место не распознает, подозреваю что там jmp по рантайм адресу. (а может и статике, я хуй знает как понять).
Собственно вопрос - как найти откуда вызов, блядь?
Помогите нубасу, молю.
В этом коде ида не распарсила функции, соответсвенно без рантайма не знает что туда jmp прилетит.
После того как распарсит, options - general - analysis - reanalize program
Речь не про поправить условный переход в какой-нибудь древней шароваре, а именно что разбор потрохов алгоритма активации шиндоуз/адобов и т.п. монструозных вещей
Странно.
А чё exelab накрылся? Или туда вход особый нужен? Раньше нормально заходил, хотя я там не сидел никогда.
нет
>современного софта
А современный софт весь в веб ушел. Есть конечно игрули да какие-нибудь кады-хуяды, но и этого становится ничтожно мало.
Как я понимаю ре - это когда ты колупаешься в по без сырцов, так? То есть имея сырцы можно понять, логику, архитектуру по и прочее. А вот только по исполняемым файлам можно восстановить все что задумывал автор? Ну вот в руки конкурентов попали исполняемые фалы, без сорцов. Возможно ли понять и восстановить и монетизировать то что попало в руки?
Возможно понять, как оно работает. Для рандомного говна смысла не имеет, но для каких-то узких ниш вполне, где оно и ценится.
Я так полагаю что тема с ре не паблик, а есть кейсы, мб у местных. Тема то такая. Ладно я выучу что-то, а где найти работу? И есть roadmapы по ре? По тип питона или явы. Ну типа чеклистов, роудмэпов, читшитов или мастридов?
Нигде. Это не выучу и вкачусь.
Если ты выбираешь как один из вариантов, то сразу вычеркивай.
> Получается, надо взять 7 байт по смещению -6. КАК?
Звучит как типичный LZ77 с окном. Копируешь по одному, из -6 скопировал байт в конец, вот уже и седьмой байт.
но ты уже давно разобрался
Не разбирался, это получается на место седьмого байта вставляешь первый в окне, на место восьмого второй и т.д.
Как бы сжимается и разжимается без этой тонкости. Но если понадобится, добавлю в код, спасибо.
Лучше вобще начинать с восьмибиток пятидесятилетней давности, современный ты наш.
> процессор процессору рознь по архитектурной составляющей
У них у всех архитектура x86. Вряд ли тебе придется писать под ARM. А если все-таки захочется, тогда конечно придется с ними отдельно разбираться. Кроме того, фичи типа MMX, SSE и т.п. тоже везде работают одинаково, хоть и не все процессоры их поддерживают. Просто со временем складываются стандарты, потому что так удобнее.
Вот тебе свежак: early access ещё не вышедшей книги http://libgen.is/book/index.php?md5=2F85E7A6B145EF22ECC2E8F11FD77804 .
Самое последнее из русскоязычных, наверно это http://libgen.is/book/index.php?md5=C72F16F6A4C7FDDA9344D408AAE76C9E . Но книга - так себе.
Да, с новыми книгами по ассемблеру на русском последние лет 10 довольно печально.
Пойми, программирование на ассемблере - методология старая и глубоко продуманная. Так что есть смысл изучать классику: и Нортона, и Абеля, и Абраша и т.д. Что касается X86 - у него ведь (некоторая) пресловутая обратная совместимость. Так что тот же Юров актуален где-нибудь на 70% (и как первый учебник весьма годен).
Можно считать, что знания программирования на ассемблере складываются из нескольких источников:
• Описание/спецификация системы машинных команд (ISA);
• Руководство для ассемблера / диалект языка ассемблера;
• ABI программного окружения;
• API рантайма/библиотек (если есть).
Так что, в принципе, можно и без учебника вникать.
Забыл сказать, ещё надо (считай обязательно) уметь пользоваться отладчиком ну и может быть прочими инструментами.
Купил короче этот альбом чтобы не "выгорать". Круче него только The fat of the land, считаю. Пью пивасик.
Я правильно понимаю что есть вот эти варА,Б,С их надо менять тогда регистры и флаги поменяются? Тогда почему у меня не меняется ничего.
Флаги меняются после каждой арифметической команды (не без исключений). Показывай конкретно какой флаг ты ждёшь, в какой точке программы.
А разве имена переменных не нужно поместить в квадратные скобки, чтобы показать, что это адрес, а не непосредственный операнд? Хз как в тасме, но обычно так.

Я понял что не понял что такое флаги, и как вообще правая часть работает... хотя с кодом разобрался
По моему квадратные скобки только в фасме однозначно означают память. Masm, nasm tasm используют их иначе, там ключевые слова (ptr).
подскажи плиз а че за 0117 и 0118. Это типа в этих ячейках памяти хранится 100 и 60?
Там от инструкции все зависит, у каждой инструкции в описании сказано что она делает с флагами.
Видимо да, и как видишь синтаксис разный. Наверное когда указываешь имя переменной, скобки не нужны, а когда адрес этой же самой переменной числом - нужны.
Instruction set reference скачать нужно или гуглить переводы на русском.
Всё, спасибо <3
> Наверное когда указываешь имя переменной, скобки не нужны, а когда адрес этой же самой переменной числом - нужны.
Вряд ли. А иначе как например загрузить в регистр сам адрес, на который указывает метка?
Через ключевое слово ptr
Вообще lea считает конечный адрес из любого вида адресации. Например, команда
> lea ax,[ bx + si + 12]
делает то же, что и
> mov ax,bx
> add ax,si
> add ax,12
В 32-битном режиме можно даже так:
> lea eax,[ebx + 4*ebx]
То есть, с помощью lea можно, например, эффективно выполнять некоторые арифметические операции.
Я как-то видел в интернете объяснение в духе
> нуу lea это то же самое что и mov но оно работает по-другому
Я подумал, ну охуенно, решил, что это очень сложно, и забил хуй. Разобрался, по-сути, только недавно.
проверка

Оцените качество глифов и самого перевода: I don't want to get scolded by mother again
Тред умер?

https://sonictk.github.io/asm_tutorial/
Может закинуть в шапку, если доживете до переката?
Пироговские книги - это тупо пересказ документации для тех, кто не умеет читать по-английски. Писались они тогда, когда издательства тупо не могли найти нормальных авторов. Это шлак. Можно взять Ирвина или документацию от Интела.

640x360, 0:49
Вжал буквы в диск. Допройду Терминатора и продолжу.
В фасме все примеры из коробки работают. Там и под дос и под Винду и Линукс примеры.
>нормальную шпаргалку с примерами базовых действий, арифметических операций, ввода с клавиатуры, вывода в консоль и тд.
В книжке Зубкова - "Assembler для DOS, Windows и UNIX" это всё есть.
Спасибо, посмотрю.
Кстати, для понимания быстродействия того, что ты напрограммировал, ещё нужно знать (в большей или меньшей степени) архитектуру целевого процессора. Не знаю много, ли есть смысла заниматься программированием на АСМе, не имея в виду быстродействие.
Кроме того, что касается специфики программирования на АСМе, здесь гораздо более критично понимание/умение алгоритмов и теории кодирования, чем для каких-нибудь ЯВУ.
>Не знаю много, ли есть смысла заниматься программированием на АСМе, не имея в виду быстродействие.
Программирование на асме ничем не обязывает. Порриджи сюда не лезут, кабаны не лезут, деньги сюда не текут. Это джунгли, здесь выживает сильнейший и если он выжил ему заебись именно здесь.
Смотреть на ассемблер с точки зрения "вкачусь и буду грести бабло" не имеет смысла, конечно. Но это и не программирование, это бизнес.
Кринжанул с себя
valkyrie profile
Такой перевод нормально?:
Platina : Eek!
Platina : I... I'm so sorry! Your clothes, are they...?
Надо ещё перевести Your clothes, are they...? Как правильней?
Тут какбы шутки кончились, и я по паре диалоговых окон буду зажимать на диск, до победного конца. Так что не стесняемся.
Контекст то и непонятен. Там дальше, ее кун ей скажет что это были ее покупатели. И вот непонятно, толи она так сказала изза того что пролила воду, толи изза того что заподозрила чтото.
У нас препод по ассемблеру хуевый, там проще самостоятельно заботать.
Я уже не могу, не пойму в чем проблема-то. Всё расписал в комментариях.
Как тут может быть деление на 0, если для моего типа данных 2байтовых я беру ДХ, который после умножения равен 4 и делю его на 16битный делитель, я так понимаю он число выше берёт то есть ВХ = 4?
; СПО Л/р 1 (COM)
; Арифметические операции: вычисление D=(A-B)C
; Порядок компиляции программы:
; 1. Ассемблирование: TASM.EXE lab1com.asm
; - в результате создается объектный модуль lab1com.obj
; 2. Компоновка: TLINK.EXE /t lab1com.obj
; - в результате создается COM-файл, готовый к исполнению
;F = A - B C / D + E
CODESG SEGMENT PARA ; определение сегмента кода
ORG 100H; стандартное начало COM-програмы
.386 ;
ASSUME CS:CODESG, DS:CODESG, ES:CODESG
MAIN:
; исполнимая часть программы
; вычисление F = A - B * C / D + E
SUB AX,AX ; обнулить регистр АХ
SUB BX,BX;
MOV AX,varB ; записать в AX значение varB 2
MOV BX,varC ; записать в BX значение varC 2
IMUL BX ; АХ умножается на ВХ, 4 сохраняется в DX, а в АХ 0
SUB DX,DX;
SUB AX,AX
SUB BX, BX;
MOV BX, varD ; присвоим значение BХ = 4
IDIV BX; ; Поделим ДХ на BХ - 4:4 = 1, 1 запишется в AX
SUB DX,DX;
MOV BX, varA; ; BX = 6
MOV CX, varC; CX = 2
SUB BX, AX; ; BX = 6-1 = 5
MOV AX, varE; AX= 2
ADD AX,BX; AX = 5+2 = 7
; стандартное окончание программы
MOV AX,4C00h
INT 21h
;------------------------------------------------------------
; определение данных внутри сегмента кода
varA DW 6 ; cлово А (знаковый)
varB DW 2 ; слово В (знаковый)
varC DW 2 ; слово С (знаковый)
varD DW 4 ; слово-результат D (знаковое)
varE DW 2 ;
CODESG ENDS ; конец сегмента кода
END MAIN ; указывает, что исполнимая часть программы
; начинается с метки MAIN
; СПО Л/р 1 (COM)
; Арифметические операции: вычисление D=(A-B)C
; Порядок компиляции программы:
; 1. Ассемблирование: TASM.EXE lab1com.asm
; - в результате создается объектный модуль lab1com.obj
; 2. Компоновка: TLINK.EXE /t lab1com.obj
; - в результате создается COM-файл, готовый к исполнению
;F = A - B C / D + E
CODESG SEGMENT PARA ; определение сегмента кода
ORG 100H; стандартное начало COM-програмы
.386 ;
ASSUME CS:CODESG, DS:CODESG, ES:CODESG
MAIN:
; исполнимая часть программы
; вычисление F = A - B * C / D + E
SUB AX,AX ; обнулить регистр АХ
SUB BX,BX;
MOV AX,varB ; записать в AX значение varB 2
MOV BX,varC ; записать в BX значение varC 2
IMUL BX ; АХ умножается на ВХ, 4 сохраняется в DX, а в АХ 0
SUB DX,DX;
SUB AX,AX
SUB BX, BX;
MOV BX, varD ; присвоим значение BХ = 4
IDIV BX; ; Поделим ДХ на BХ - 4:4 = 1, 1 запишется в AX
SUB DX,DX;
MOV BX, varA; ; BX = 6
MOV CX, varC; CX = 2
SUB BX, AX; ; BX = 6-1 = 5
MOV AX, varE; AX= 2
ADD AX,BX; AX = 5+2 = 7
; стандартное окончание программы
MOV AX,4C00h
INT 21h
;------------------------------------------------------------
; определение данных внутри сегмента кода
varA DW 6 ; cлово А (знаковый)
varB DW 2 ; слово В (знаковый)
varC DW 2 ; слово С (знаковый)
varD DW 4 ; слово-результат D (знаковое)
varE DW 2 ;
CODESG ENDS ; конец сегмента кода
END MAIN ; указывает, что исполнимая часть программы
; начинается с метки MAIN
Уже вроде было в треде. С квадратными скобками помещается значение переменной, без скобок адрес.
> ; АХ умножается на ВХ, 4 сохраняется в DX, а в АХ 0
Нет.
> SUB DX,DX;
> SUB AX,AX
> ...
> IDIV BX
Ты делишь ноль на BX. И да, возможно ты запутался со скобками, но это зависит от ассемблера.
У тебя же буквально на сайте написано, что в операции деления учавствуют 2 регистра. Старшая часть лежит в dx, младшая в ах.
Ты не можешь поделить на dx, он учавствует в делении. Рекомендую делитель хранить в памяти в качестве переменной.
Также для вычислений тебе нужно знать про команды cbw, cwde и cdq.
Почитай учебник Юрова, там про всё это написано.

640x480, 2:11
Там же нет реверса, он сначала должен был разобрать и собрать замок, а только потом открыть.

2. Перевыведите уравнение Шрёдингера и все Гилбертовы тензоны полей ЯО-ХМАО за 7 строк

Кому надо -- жрут библиотеки и парадигмы с пяти лет, новые люди в отрасли не нужны, мимокроки изначально опущенцы.
Количество инфы по теме уже давно перегнало ёмкость памяти человека, и дальше будет только хуже.
Хочу поднять ассемблере микросервисное веб приложение, где можно почитать о том, как это сделать на вашем чудо языке?
Первый звоночек
Ассемблер это там где надо все писать с нуля. Вот и пиши, готовых решений нет.
>Количество инфы по теме уже давно перегнало ёмкость памяти человека, и дальше будет только хуже.
Ну да... Расскажи мне как работает CD-ROM Playstation 1
Точно так же как и обычный (моторчик крутит диск, каретку грубо позиционирует шаговик, точно лазер позиционирует отклоняющая магнитная хуитка). Только может считывать антипиратскую инфу из зоны куда головка обычного привода дотянуться не может, а резак, соответсвенно - не может записать и которую можно изготовить только на заводе отсосони. Черный пластик - тупло для понта отсосони, так как у CD лазер и так инфракрасный.
Порты управления по адресам с 1F801801h по 1F801803h
Дальше вопросы?
DMA нет в твоём посте.
Как мне работать с инфой? Почему на диске 1 файл, а CD-Rom подгружает и там и здесь?
>Только может считывать антипиратскую инфу из зоны куда головка обычного привода дотянуться не может, а резак, соответсвенно - не может записать и которую можно изготовить только на заводе отсосони.
Я не знаю точно, но похоже на домыслы.
>DMA нет в твоём посте.
Ну так его и в CD контроллере PS1 нет. Все что умеет контроллер - это реквесты "сунь головку сюда" "качни ка мне этот сектор в свой манябуфер" и "сыграй ка мне этот музон" (да, CD Audio там отдельная аппаратная хуитка).
DMA и его канал 3 находится в CPU и к контроллеру CD о котором шел спич не относится.
Что то мне подсказывает, что петушочек-то ты залетный и выебнувшись про контроллер CD PS1 даже и не предполагал насколько тут тебя обоссут.
> Я не знаю точно, но похоже на домыслы.
Я уже понял что ты петушок.
> Почему на диске 1 файл, а CD-Rom подгружает и там и здесь?
Потому же почему почему в DOOM 1 файл а монстров и текстур в игре дохуя да еще и музон играет. И диск тоже в разных местах скрипит.
Ну и да, на диске PS1 должно быть как минимум ДЖВА файла и если ты мне сейчас не расскажешь прочему и какие, то я начну тебя обоссывать уже в полную струю, а там может твой пердак и до популярной нынче швабры дойдет.
>Порты управления по адресам с 1F801801h по 1F801803h
Короче только это по существу, и чё делать? Даже DMA нет.
Как, что, куда, почему? Где это написанно, покажи?
>DMA и его канал 3 находится в CPU и к контроллеру CD о котором шел спич не относится.
Ты так скозал?
Опять одна вода.
>Количество инфы по теме уже давно перегнало ёмкость памяти человека, и дальше будет только хуже.
Ну что, признаём обосратушки? Ибо кроме вычитанных 4 портов контроллера нихуя не смог найти(даже DMA).
>>181351
>>181371
Значит так, обоссыш, во первых ты сейчас подставляешь рот и принимаешь в рот мочу.
Во-вторых ты сейчас ее проглатываешь и подставляешь рот во второй раз.
> Даже DMA нет.
А теперь я достопочтенным джентельменам обьясню, зачем этот >>181348>>181351>>181371>>181329>>181217 петушок сейчас будет глотать мочу в третий раз.
Дело в том, что петушок где-то выучил баззворд DMA и краем уха где-то там слышал про то как DMA работает на пекарне, а точнее на устройствах IDE и пришедшим к ним на смену устройствам SATA. В них действительно контроллер имеет всторенный DMA движок который позволяет по инициативе самого IDE устройства писать в оперативу хост машины. Вооружившись и экстраполировав это знание на всю технику петушок решил прийти на макач и, почувствовав себя невьебенно умным, начал высирать псто за пстом.
Только вот петушок не учел, что стандартом IDE из его манямирка мир не ограничивается и устройства могут реально быть устроенными по-иному. Как пример - упомянутый петушком контроллер CD из состава сосноли Sony PlayStation.
Данный контроллер не имеет на борту DMA функционала, характерного для IDE, поскольку архитектурно консоль устроена так что возмождности DMA впендюрены в многоканальный контроллер на борту CPU, с которым работает программист задавая ему команды по обмену данными между различными видами памяти и портами устройств (в противовес имеющемуся на ПК подходу, где DMA вызывается со стороны периферийных устройств).
А теперь, дабы петушок был окончательно обоссан и этот в этом треде все поняли кто этот обоссатый канючийся поридж, а так же для расширения кругозора прикладываю пик 2 и пик 3.
А теперь, петушок будет обязан найти на обоих пиках слово DMA иначе получит швабру в сракотан.
На все 5 минут, время пошло, уеба.

Ты мне так и не обьяснил как работает связка контроллер - DMA. IDE приплел зачем то.
Ну да ваш гавпротык(хованский) сидит же, все мысли теперь о швабрах.

270x360, 0:15
Сколько тебе годиков?
> обьяснил как работает связка контроллер - DMA
Точно так же как и без связки - пишешь в регистры контроллеру чо ему делать, контроллер высирает то что прочитал в свою маняпамять (у него собственный буфер чтения есть куда он и высирает). С DMA этот процесс попросту автоматизируется и позволяет частично разгрузить такты CPU на копировании этого буфера в основную оперативу..
Опять вода на самом интересном месте. Вот я тоже могу сказать - чтобы был дождь, надо просто просить Прометея сильней.
А как это сделать? Где это написано?
Ты мне ссылки не кидай. DMA PSX я и сам могу вставить в гугл. Ты мне объясняй как это работает,.и описание этого простого механизма. А то по твоим словам ваще ниче делать не надо и все в память само копируется. Вот только куда?
Мне нужен полный механизм, от считывания сектора, до попадания данных в память по указанному адресу.
Картинки ты искать умеешь, я понял, найди теперь нужную инфу.
>>181647
>ряяя сделайте мне домашку
Ну уж нет шваброгей, дальше ты как-нибудь сам.
Так и быть, напоследок подскажу: последовательность такая
Sync -> Setloc -> SeekL -> ReadN -> А вот тут ты начинаешь заводить свой DMA.
Каждая из этих команд бросает прерывание - какое описано в документации. Команды пишутся в регистр 1F801801h, параметры для них в регистр 1F801802h. В регистре 1F801803h ты настраиваешь, хочешь или нет получить в пердак прерывание после выполнения команды (бит 5) и должен установить 7 бит в 1 если хочешь получить данные с диска вместо хуя защеку.
Да, обрати внимание, есть еще регистр 1F801800h - в нем ты можешь смотреть флаги выполнения операций контроллером, но первые два бита отвечают за переключения банок у некоторых регистров у которых они есть.
> Че за фиксация на швабрах? Это в связи с чем?
Я понятия не имею, за чем ты своей дупой швабры ищешь.
>>181647
Это не работает.
Шваброзависимый сам все рассказать должен был, первым же постом.

Тут получается такая хрень:
1 Как с авто, это коробка передач, это педаль газа, тормоза сцепление. А как на этом ехать инструкции нет.
2 Функции CD-ROM на С из библиотеки psyq.
И для меня между 1 и 2 большая пропасть. Потому что я хочу наебать psyq, но чтобы наебать я должен знать как он работает на низком уровне, педали есть и что, там ньюансы есть - скорость считывания, свои трики какие-то.
Мне щас это не оч. нужно, но было бы неплохо узнать. Я это не нашёл, на пикрелейтед максимум что я нашёл. Но на практике всё по другому.
При определенных ситуациях (ОЧЕНЬ зависит от аллокатора памяти) при двойном освобождении следующая аллокация может вернуть указатель, который уже указывает на какой-то валидный чанк. Результат - у тебя есть 2 указателя на один чанк. Имея возможность читать по вернувшемуся указателю - получаешь примитив чтения, имея возможность писать - портишь данные по указателю со всеми вытекающими. В общем и в целом, double free очень сложно эксплуатировать но возможно, особенно в современных аллокаторах памяти. В конечном итоге всё очень зависит от конкретного состояния программы во время триггера самого примитива double free, от защит, реализованных в аллокаторе памяти, и от банальной удачи.
Спасибо большое за ответ! Есть ли где инфа о том, по какому принципу можно понять когда будет производиться аллокация "поверх" другого объекта в различных аллокаторах?
Как я уже сказал, это ОЧЕНЬ зависит от реализации аллокатора. Нужно реверсить/читать код аллокатора памяти, дабы понять что произойдёт при двойном освобождении и есть ли вообще в аллокаторе митигации против этой атаки. По этой самой причине, эксплуатация double free - одна из самых сложных если не самая из всех остальных типов уязвимостей на уровне памяти.
1 пиу, типа робот играет против Масма, типа масм это почеловечески. И это не пропаганда? Специально же уводят от истины.

Существуют ли похожие бложики про хромого?
1 Примем за идеал реверсачера который оставляет минимум следов изменения. Минимум изменений - максимум эффективности.
2 Мне нужно изменить заархивированный код, я же его должен сначала разархивировать, потом изменить, написать архиватор и заархивировать. Заархивированный изменённый код получился меньше чем исходный.
Вот и найди мне примерный алгоритм уровня a,b,c, с помощью которого у меня получится заархивировать изменённый код в точно такого же размера архив, как и у исходного кода.
А то программирует мне мышкой тут...

640x360, 5:30
Я вот против этого с самого начала, а на швабра-куна ничего не имею.
>1 Примем за идеал реверсачера который оставляет минимум следов изменения. Минимум изменений - максимум эффективности.
Можно конечно тут про швабры вспомнить, но что так, то так и будет.

Ах и да. У меня вопрос. Если я не изучал ассемблер, но у меня есть опыт в программированиибольше чем хелоу ворлд, однозначно немного на плюсах, но в основном на шарпах. В основном вопрос к ассемблеру. Мне в этой книге все подробно разжуют, или лучше еще вместе с этой книгой, читать книгу по самому ассемблеру? Да и я сам хотел бы писать эксплойты, и читы. Что посоветуете?
Чё ты Fasm не осилил?

640x360, 3:19
А вот теперь представь что делают не поехавшие алкоголики.
Я спать пойду. Можете свой ИИ озадачить, как вариант.
Какой блять листенинг, высокоуровневый? В асме ты сам пишешь этот листенинг. Берешь пустой файл, переименовываешь его в .asm и пишешь код. У твоего листенинга ценность околонулевая. Написал код, запустил в отладчике, вот тебе и весь листенинг.
Научись работать с отладчиком. Ollydbg тебе инструмент на всю жизнь.
Судя по листингу, там ещё адреса внешних ф-й. тебе же надо найти энтри поинт это обычно main, _main, _start, start, в винде свой формат вроде, там winmain@n, где n - размер аргументов в байтах.
Алгоритм это последовательность действий.
Как же охуенно когда есть отладчик.
Eng 2 Ru:
```
KeyDown Alt
KeyDowb Shift
KeyUp Shift
KeyUp Alt
```
Ru 2 Eng:
```
KeyDown Alt
KeyDowb Shift
KeyUp Shift
KeyUp Ctrl
KeyUp Alt
```
Там в составе идут два бинарника для сборки. Но возникает вопрос: а они как собраны? Где их исходники?
Калашникова не читал, но принципы что в DOS, что в винде, что в линупсах будут плюс-минус одни и те же, за исключением работы с ОС и железом.
Подскажите, пожалуйста, книгу по оперционным системам, которая бы описывала в общих чертах их строение как можно сделать на примере разных ос. Чтобы она не было тупо о винде или тупо о линуксе написана.
Ну классика - для разбега.
http://libgen.is/book/index.php?md5=61939527478E5674702386FBE5DAD3EE

400x720, 0:14
Мерси, моё увожение
bootloader?
GRUB умеет подобное
1 Разбиваем файл на чанки, присваиваем чанку тег несжатого чанка. Вычисляем новый размер файла с тегами.
2 Сжимаем с проверкой размера.
3 Если размер после сжатия чанка стал меньше нужного, подгоняем последний чанк под нужный размер. Оставшиеся чанки оставляем как есть.
Итог: сжатый файл нужного размера, распаковщик всё распаковывает.
Годная книга, но идёт тяжеловато, почему-то больше 30 страниц в день не осиливаю, толи переведена так толи я такой тупой, но до этого плюсы, си, архитектуру и микроарихитектуру читал там нормально шло.
Но читать интересно.
Кстати, а зачем исходники? Программисту на асме нужны исходники, зачем? Это тавтология какая-то.
Программист на асме в теории может раскомпилировать любой исполняемый файл в асм вот тебе и исходник, кееееек
Я не разбираюсь в этом, у меня крайне поверхностные знания, мог хуйню сказать
Так как команды на gpu подаются? Они напрямую программистом подаются или подаются на cpu и он решает что их нужно на gpu послать?
Хороший вопрос в целом.
>Они напрямую программистом подаются или подаются на cpu и он решает что их нужно на gpu послать?
А этот не очень. Не знаю, но предположу, что команды посылаются на определённые адреса памяти. Конечно программистом, а кем ещё?
Ну я имел в виду что типа gpu он же другой по микроархитектуре и больше заточен на обработку графики. ну и типа я знаю только что программист имеет доступ к памяти(регистры, озу, жд), а вот про gpu не слышал. Следовательно наверное cpu определяет может по каким-то меткам какие команды лучше делегировать gpu.
Хотя это всё очень долго, особенно если через память делать, а gpu надо очень быстро работать, объём вычислений огромный
>>196011
Спс, но я знаю как происходит отрисовка(поверхностно) мне интересно как команды на графический процессор подаются который и выполняет отрисовку.
>>195992
Ну да, они состоят из блоков цифрой логики которая по совокупности конкретных цифровых сигналах на конкретных входах даёт конкретные выходы.
В асме ещё есть скрытый -1 уровень).
>Ну да, они состоят из блоков цифрой логики которая по совокупности конкретных цифровых сигналах на конкретных входах даёт конкретные выходы.
Только разница во времени, обычный cpu тебе даст на выход, допустим за 0,5 секунды, потому что он общего назначения. А видеопроцессор тебе даст на выход мгновенно, потому что он только под это и заточен, другие команды он не сможет выполнить.
А как туда подаются команды я не знаю)
>Только разница во времени, обычный cpu тебе даст на выход, допустим за 0,5 секунды, потому что он общего назначения. А видеопроцессор тебе даст на выход мгновенно, потому что он только под это и заточен, другие команды он не сможет выполнить.
Спасибо это я знаю.
Меня именно интересует как команда в gpu подаётся. У меня пока 2 варианта предполжений:
1. cpu сам определяет какие команды можно делегировать gpu а какие нет, но это долго. Пока это команда на cpu поступит с истоничка ввода, пока cpu обработает, пока она по шине придёт на северный мост, пока она её отправит на видеокарту, это колоссальные потери времени.
2. Команды для графики не попадают на cpu вообще, они с источника ввода подаются на южный мост, южный мост делигирует их на северный, а северный мост отправляет её на видеокарту, а видеокарта после обработки отправляет её на монитор.
> cpu сам определяет какие команды можно делегировать gpu а какие нет, но это долго.
Да как он может чёто делегировать? У него уровень mov ax, bx. Ты может путаешь, считаешь что mov это команда, а ax, bx это переменные? Нет. mov ax, bx это одна команда, mov ax, cx это другая команда. У этих команд есть определённый двоичный код.
У видеокарты может быть совсем другой код и мнемоники. У видеокарты может быть mov ax, ebx и соответствующий двоичный код. mov ax, ebx на процессоре общего назначения недопустима, потому что нарушает логику предназначения этого процессора. А на видеокарте вполне может быть.
Вы должны понимать для чего нужен ISO - Международная организация по стандартизации.
Именно там назначается двоичный код для мнемоники mov ax, [bx]. Там назначается вообще всё, поэтому структурировать знания лучше начинать с этого. Со стандартов.
Россия, например, может назначить другой код для мнемоники mov ax, [bx]. Поэтому написанный в вашей программе mov ax, [bx] не будет работать на российский процессорах.

Ай блядь, вот я ебланище, даааа. Команды это же от архитектуры зависит, понятное дело что у видеокарты какая-нибудь своя архитектура и там другое всё.
а, понял. Я видел че-то про массивы где чтобы не определять по одной цифре все пишется в одной строчке.
>российских процессорах
Гавно с 1 ядром и частотой 400 мега герц для разработки на котором нужно стоит невыездным хуесосом в оборонке на пожизненный срок? Спасибо, откажусь
Да не от архитектуры, а от стандартов. Свою архитектуру может любой дурак сделать, только она не будет совместима с архитектурой которая распространена по всему миру. Это важно!
В этом и суть ISO, суть стандартов.
Ты даже не представляешь насколько сложные вычисления у видяхи когда она обрабатывает 30-60 кадров в секунду какой-нибудь 3х мерной игры типа гта.
Не представляю. Но чисто логически, туда не могли запихать процессор, который делает mov ax, bx и вот эти все ненужные движения для отображения видео. Там наверно стоит проц со специфическими задачами, который не будет вычислять 3 в кубе(к примеру), а сразу выдаст прописанное значение.
И как бы вопрос о сложности. Сложно по сравнению с чем, с человеком, с cpu, c другим gpu?
Это чисто попиздеть, в специфики видеокарт я никакой.
Это -1 уровень асма для меня)
Поэтому в приставках используются более слабые процы, потому что им не надо вычислять 3 умножить на 3, у них никогда такой задачи не будет. Утрированно всё.
Без обид, написал как есть и похуй, заебало всё.
2 у видяхи векторная архитектура
3 а) цп может отправлять данные в коммандый буфер
б) видяха имеет dma и mmu для работы с ram, тогда цп просто шлёт команды

А я помню на CGA надо было ждать обратного хода лучша и только после этого писать в видеопамять, иначе помехи были на экране.
На EGA уже пофиксили это.
А ещё заебаты видеорежим на VGA был
3 а) тоже уже устарел.
Тогда же прямо в видеобуфер писали. Сейчас же нужен драйвер и динамическая либа. Всё это пишут на яву. Даже для загрузчика ассемблер уже не нужен, есть uefi.
Это ремейк? Графика вроде хуже была в луме.
я ебал ваш язык просто пиздец
нихуя непонятно
и работает через жопу
Ууу сука.
Я может вас уже заебал но мне похуй я больше не знаю как тут выжить.
INB4: Да я пытался в скобках переменные писать, еще пытался word [varA] и т.д., файл экзе. ТАСМ, i8086
Почему-то когда выполняю программу и вместо переменных использую числовые значения, то регистры работают так как надо, помещаю 2 в ах в регистре 0002, а если через переменную это делаю mov ax, varA то регистр заполнен FFF5.
вот код программы ехе
> а если через переменную это делаю mov ax, varA то регистр заполнен FFF5.
> еще пытался word [varA]
Так а что получается, если написать mov ax, word [varA]?

>Так а что получается, если написать mov ax, word [varA]?
по моей логике? или что по факту происходит
EA00 записывается.
Я вот ща думаю может там из-за того что тип данных такой большой dw записывается лишняя инфа

Если я прямо вставляю без varB, то записывается корректно всё значит что-то не так с переменными
Чё у тебя там dw везде, если у тебя 16 битные регистры. Ты совсем чтоли тупой? 16 бит это word.
1 это бит
ff это байт
ff ff это слово
ffff ffff двойное слово
dw - это и есть 2 байта = 16 бит = word, что не так?
по заданию надо пользоваться директивом dw
dw это double word, двойное слово 32 бита.
Значит задание у тебя с подъебоном и препод всё правильно сделал, потому что ты нихуя не шаришь. Тебе надо в команде написать указатель на данные в памяти, которые ты туда записываешь своими var'ама.

>dw это double word
это толстый троллинг?
d - директив w- word
dd - директив d- double word
учи азы
Ну а ты можешь посмотреть в TASME как они у тебя записываются в память, дундук.
>Почему DS не инициализируешь? Куда он указывает у тебя?
А я не знал что его надо инициализировать
и что туда пихать, DATASG ?
В синтаксисе TASMа не разбираюсь.
Обычно для ДОС-приложений инициализируют так:
MOV AX, DATASG
MOV DS, AX
Это ты тупиздень, не можешь в банальную логику с отладчиком. Выживальщик бля я ебу
Да нахуй мне чёто учить? Посмотрел в отладчике чё получилось и всё понял.
Учи, учи, когда крышей двинешься уже и не вспомнишь ничего.
> Транслятор должен знать заранее, через какие сегментные регистры будут адресоваться ячейки программы, и мы сообщаем ему об этом с помощью оператора assume (assume - предположим). При этом в регистр CS адрес начала сегмента будет загружен автоматически, а регистр DS нам придется инициализировать вручную. Обращение к стеку осуществляется особым образом, и ставить ему в соответствие сегментный регистр (конкретно - сегментный регистр SS) нет необходимости.
ASSUME похоже просто указывает что за DS закреплена секция DATASG.
Я же.
Так-то какой-то дибилизм. Зачем нужно указывать ASSUME DS:DATASG? Если DS всё равно надо инициализировать?
Почему у нас такое образование? Зачем нужна эта хрень которая только запутывает? Возможно, если писать простыни кода эта директива окажется нужна, но лучше же научиться пользоваться в тот момент когда она будет нужна. Тогда и заучивать ничего не надо будет, сам поймёшь нужность и автоматом запомнишь.
Как бы образование идёт от теории к практике, но по моему мнению лучше чтобы было наоборот. Это как минимум интереснее чем тупо заучивать.
TASM уже нахрен никому не нужен, но заставляют заучивать эти директивы. Да тут рили свихнуться можно если заучивать директивы от всех ассемблеров, в голове просто не останется места для чего-то ещё. А код то в итоге получается одинаковый.
Верно для x86, на арме 4 байта - это word слово, а 2 байта это half-word пол слова. Остальное называется так же.
Записываем в массив, теперь чтобы вывести 2 хочется вписать String[1], но выдаст 23, как можно после String[1] добавить '$' чтобы вывод закончился на двойке?
Нет. Мне просто интересно решил плотно сесть в компьютер сайнс, читал книжки по архитектурам, микроархитектурам, по операционным системам читаю книжку(мне в этом треде) 2 недели назад посоветовали. Потом планирую про компиляторы почитать, про то как антивирусные программы работают.
Нравится низкоуровневая хрень просто.
Как я понимаю, они ищут в памяти изменяемые значения. Если значение не меняется, то ничего не найдёт. Например, меняется кол-во патронов, то можно найти. Статичные объекты не найдёшь.
Я никогда не пользовался, отладчик есть.
Лучше научиться пользоваться отладчиком.
Мне он не пригодился ни разу, даже в трудных моментах. Возможно, лучше расскажут те кому он помог.
Спасибо, понял. Ну я про отладчик не слышал, думаю про это я почитаю когда до книги про компиляторы дойду
Мерси. А ещё вопрос ты писал
>Как я понимаю, они ищут в памяти изменяемые значения
Я так понял в озу у каждого значения есть свойство типа read write и если там write разрешено то такое значение считается изменяемым, а если read only то и трогать его нельзя да и смысла нет особого
>Книги по ассемблеру:
>"Архитектура компьютера" Э. Таненбаум
Есть ли смысл читать если до неё прочитал книгу супругов Харрисов тоже по архитектуре?
Имел ввиду значения которые изменяются. Ну то есть если кол-во патронов изменилось, то значит изменились значения в памяти, вот artmoney и должен их показать. Это примерно, потому что я не пользовался artmoney и читенжином. У меня принцип - нет читерству.
Понял, спасибо. Да не читерит никто и вообще в игры не играет, это в образовательных целях всё.
В отладчике можно сделать почти также, может даже проще получится. Надо поставить один брейкпойнт перед стрельбой, второй после стрельбы. Сделать дамп памяти на первом брейкпоинте и второй дамп памяти на втором брейкпоинте. Два этих файла с дампами сравнить в hex-редакторе (neo например). Он покажет отличия, отличия которые для видеоотображения значения сразу отсеиваются. С остальными значениями можно ковыряться, ставить поочередно брейкпоинты на изменения этих значений. Постепенно найдешь значение в памяти которое влияет кол-во патронов. Чем лучше шаришь в реверсе и во всяких функциях, памяти и отладчиках, тем быстрее найдешь.
Мерси, спабо за подробное объяснение. Тогда после книжки по осям пойду читать про отладчики и компиляторы. А ты сам на каком стеке работаешь если не секрет?
Если честно, я даже не знаю что это значит. Мне надо было кучу файлов соединить в один, я знаю что можно это сделать при помощи досовской команды, я не вспомнил и не нашел, написал прогу на асме которая все соединила)
Я имел в виду работаешь ты на работе, какие технолгии используешь. Какой ты программист, системный там или что?
Моё увожение. Сетевой инженер это ты чтоли у какого-то провайдера работаешь и более мелким провайдерам интернет подаёшь?
Это мои наблюдения, а не то чтобы я там спец по шифрованию.
Раньше работал, в нулевых.
Никто не спорит, но без книжек ты не будешь иметь общего представления что можно делать и вообще как к делу подступиться. Будешь как один кадр с моего предыдущего места работы который все знания получал через телеграмм каналы и статьи из поисковика. Он много лет работал и когда нужно было выполнить допустим 100 похожих команд где просто 1 число увеличилось на 1 он их копировал в редактор текстовый и там менял эти значения, хотя элементарно в консоли скрипт 5 сек написать чтоб он эти команды размножил и применил.
1. Для того, что бы вывести число, тебе надо сканкод клавиши, который ты получил при отконвертировать в ascii символ, который ты будешь выводить на экран.
2. Можно вывести напрямую в видеобуфер, можно вывести символ через int 10h, либо через int 21h, в последнем случае, перед выводом символа непосредственно запиши после него $ в область памяти.
Мм...
Мне просто надо арабские цифры перевести в римские, я думал можно как-то отдельно массив отфильтровать и поставить 9 условий поставить if str[0] = '1' then str[0] = 'I' ну грубо говоря, хотя херня метод всё равно
У тебя начнуться проблемы с таким подходом сразу на цифре 4, потому что в памяти это 2 знакоместа - I и V.
Нет, он с обязанностями должностными справлялся, а это так маленький ньюансик. Человек пришёл с 0 опыта с компанию и тупо сам в процессе всё изучил через поисковики и телеграмм каналы, лол. Ни одной книжки он никогда не читал, на практике много что освоил, но вот такие пробелы когда он не знал про консольные скрипты и правил много однотипных команд через редактор текста присутствовали.
Пиздос, конечно. Не страшно то, что с нулевыми знаниями пришел, хуже что по ютюбу, поисковикам копипастить научился.
Ну он такой человек был, нормис, задротскими навыками не обладал, книжки читать он не мог, клинило его, устроился по блату кстати.
Как бы сделал не знаю, первое что приходит на ум, как раз соответствие числа индексу в массиве с римскими числами. Да, пожалуй, лучше под римские числа отводить не байт, а 4 байта, но тогда вопрос, как конвертировать тысячи и тому подобное.
>Надо значения этих символов в памяти преобразовать в другие значения в памяти. До преобразования символов надо пересчитать значение из hex в dec, чтобы в памяти вместо FFh стало 255h, например. Потом это значение посимвольно преобразуешь в ascii-код(или что у тебя) символов I V через xlat.
Окей, попробую завтра тогда. Спасибо.
Поясните, если ли смысл пытаться обмануть системы антиплагиата? Насколько я понял тупо клонировать такие же символы только с другим кодом не вариант и программа палит. А как она палит? Графически чтоли текст распознаёт?

А если мы с клавы вводим числа 123 те же, в переменную
InBuff label byte
MaxSymb Db 9
RealSymb Db ?
StringT db 9 dup ('$$$$')
То там же хранится его десятичная версия в виде символом 1, 2, 3?
Тогда и переводить из 16-ричной в десятичную не надо? или я не прав
Тогда надо подумать как на разряды поделить.
Тогда не надо. Там же в переменной будет ascii 31h 32h 33h. Тогда надо отнимать 30h, иначе надо делать большой массив для xlat чтобы на 31 месте бы код I.
Жопа, xlat наверно мало тут поможет, потому что уже для 2 надо II, а это два байта. Сложно.
https://www.kalkulaator.ee/ru/konverter-rimskix-i-arabskix-chisel
Тогда наверно надо отнять 30h, потом из hex 010203 сделать 123h. Потом както дальше преобразовать в римскую систему счисления, а потом уже xlatом менять на ascii коды M C L X и т.д.
Не, мне по заданию надо просто цифры вписать как поток
123
и чтобы из этого получилось -I-II-III-
51 -V-I-

1й разряд (нулевой) = 06 = 0, выведет -I-
16 = -II-
Ух бля, уже близко к победе
И если си не может быть в скобках, тогда как туда переменную можно засунуть?
И если можно, почему так ещё не делают, ведь это огромное упрощение реверса если прога как-то упакована или защищена, ведь её код можно просто спиздить из оперативки.

Совместными усилиями треда я смог выполнить лабораторную работу.
Благодарю анонимов за поддержку.

За первую часть актуальную тоже буду благодарен
Если честно, препод какой-то полупидор с полумерами. Скажи ему что в /pr делают полноценные проги/конверторы и этой хуйнёй не занимаются. Хуйня не будет работать как надо, потому что она хуйня.
Из высокоуровневых ЯП ничего не знаю, только Си на троечку, если он считается. Пытаюсь вкатиться в асм потихоньку. Что не так с моим вопросом?
> ты и так можешь все задампать
Могу задампать, если никакой защиты от пиратства нет. А если прогу каким-нибудь вмпротом упаковали или зашифровали, то ведь проще уже распакованный код считать напрямую из памяти. По крайней мере, хотелось бы знать, насколько возможно это реализовать?
Типа, пока все пытаются бороться с программными уязвимостями, ты можешь воспользоваться уязвимостью железа (учитывая наличие оного) и полностью обойти какую-либо защиту.
>А если прогу каким-нибудь вмпротом упаковали или зашифровали
Ну так и дампай из памяти после этапа расшифровки, и вообще, пчел, вмпротект - виртуализатор, как в условной яве есть байткод и ява-машина, так и тут своя виртуальная архитектура и команды поверх х86.
В какой бы момент времени и каким бы способом ты не добыл содержимое памяти, на выходе получишь раздутый код, который в декомпилере выглядит как нечитаемая каша такая же, как у тебя в голове, без обид.
Явное практическое применение подобных дыр - воровство данных и обход защитных механизмов для воровства данных. Пользы в обычном дебаге ноль, на своей локальной тачке с помощью подобных дыр нельзя сделать ничего такого, чего бы нельзя было сделать и без них.

Спасибо что разжевал, теперь понятнее намного стало. А насчет каши согласен - надо как-то инфу в голове упорядочить или более углублённо изучить вопрос.
Мб посоветуешь какой-нибудь литературы по архитектурам? Сейчас мои знания на уровне этой книжки, что после неё стоит почитать?

Пиздец, не принял защиту, начал низкоуровневую хуйню спрашивать мол 'а что если вписать твою хуйню которую ты выводишь вывести еще раз в конце?' В итоге у меня затирается чутка текст а я не ебу как это исправить.
сука
Я ему объяснил всё что делается в коде, а ему похуй,
Cпрашивает есть ли динамическое выделение памяти в ассемблере
Спрашивал а че значит лейбл, стринг т сколько выделяет байтов после ввода в переменную ( я отвечаю что столько сколько в реалсимб будет храниться, он недовольный урчит)
я хз как это защитить пизда
В ассемблере динамического выделения памяти быть не может, так как это свойства операционной системы. Запрашиваешь страницы, потом смотришь, достаточно ли страниц памяти, если нет, запрашиваешь еще. Все это делается через проверку выделенных участков памяти и системные вызовы.
Тема объяснена в общих чертах в труде Programming From Ground Up - https://download-mirror.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
Глава 9
и в видео из нескольких частей:
https://www.youtube.com/watch?v=RSuZhdwvNmA
Так про память ссылки дал (тема сложнее, чем кажется на первый взгляд, советую видео посмотреть. Куча нюансов всплывает)
Далее, как следует прокомментируй код, что бы было меньше деталей за которые можно зацепиться.
Полный код программы можешь привести?
Посмотрел код. Он как существо Франкенштейна, собирался из разных частей?
Выработай единый стиль написания кода. Либо все заглавными буквами, либо все строчными. Работай с целыми регистрами всегда (короче код), а с их частями - там где это необходимо.
Правильно:
>MOV AX,4C00h
>INT 21h
Неправильно:
>MOV DH, 10 ; позиция по вертикали
>MOV DL, 35 ; позиция по горизонтали
>MOV AH, 02H ; установить положение курсора
>INT 10H ; вызов прерывания BIOS 10H
Прокомментируй весь код.
Уточню, что бы было понятно. Ассемблер - это инструмент. Сам по себе он ничего делать не может. Выделение памяти - функция операционной системы. Динамическое выделение памяти - работа с данными, размер которых заранее не известен. Достигается путем выделения нужных страниц памяти под данные по мере исчерпания свободного пространства уже выделенных страниц. Реализация - на усмотрения программиста. Дополнительную информацию я тебе привел.
>динамическое выделение памяти в ассемблере
Нет такого понятия в АСМе. Ну то есть совсем.
Уточни, что имеется в виду. Если, это понятие в рамках какого-то ЯВУ, ну так и смотреть надо, как это делается в рантайме конкретного ЯВУ.
Препод тут сидит чтоли, лол. Ок, завтра напишу конвертор в римские цифры и скину исходник. Сразу красный диплом проси)
Так ты и не шаришь же нихуя. Ты пытаешься как-то уйти от задачи, решить её на высоком уровне. А я же тебе говорил, что изображение на экране это просто изображение. Вся суть в вычислениях.
Ты хочешь как-то хитро наебать ассемблер чтобы поменять одни символы на другие. Это так не работает.

480x360, 2:05
подсмотренно
Видеокарта определённо регистрируется в операционной системе и она имеет свой драйвер.
Выходит всё таки что сперва процессор посылает сигналы на видоекарту через видео драйвер?
Динамического выделения памяти не существует. Это просто большое по объему место в физической памяти которое выбрано и зарезерверивано ос для какой то перемнной в какой то программе
> Это просто большое по объему место в физической памяти
> которое выбрано и зарезерверивано ос
Зависит от операционной системы. Если мы про linux - это объем неинециализированная память выделенная для программы.
Прочитай что такое стэк (stack и heap). Я ссылку привел на книгу.
> Видеокарта определённо регистрируется в операционной
> системе и она имеет свой драйвер.
Да.
> Выходит всё таки что сперва процессор посылает сигналы на
> видоекарту через видео драйвер?
Нет, не выходит. Процессор вообще ничего не знает о наличии или отсутствии ОС. А архитектуре комьютера есть определенные участки памяти, которые отвечают за вывод изображения. Упрощенно - на них посылаются данные, после обработки которых выводится изображение.
http://www.techhelpmanual.com/93-rom_bios_variables.html
Там и лишнего можно выкинуть немного.
Та, похоже, зря ты распинаешься. Этот щегол упорно не хочет читать ссылки, которые ты кидаешь, а предпочитает упарываться своими маня-гипотезами.
>А архитектуре комьютера есть определенные участки памяти
А где они? В процессоре или в biosе?
У меня пробелы да, я читал про архитектуру, как там процессоры собираются из логических элементов, автоматов, триггеров, про асмы, про то как ввод вывод на сторонние устройства идёт, но нихуя не было там про работу видеокарты. Вот не знаю в какой книге этот пробел восполнить ты скинул мне ссыль я глянул вроде как эти адреса описсанные там к биосу относятся
Насколько я понял по ссылке там какие-то биос переменные так и что блэт ты хочешь сказать что время работы пк когда пользователь в игру играет сигналы на видеокарту поступают через микросхему биоса или что?
>сигналы на видеокарту поступают через микросхему биоса
Ты тупой или да? Микросхема БИОСа - это ПЗУ. Туда программа записана ('прошита'). Как через ПЗУ могут "поступать сигналы" на какую-то там видеокарту?
Ну а как тогда? Ну блять ну у меня реально пробел в знаниях я не спорю. Я читал книгу по архитектуре да там про процессор был, как он там на кристалле построен из транзисторов, как эти транзисторы в цифровую логику собираются, про ассемблеры, комманды ввода вывода, шины.
Но блять про видеокарты нихуя кроме того что иногда видеосистемы могут размещаться на одном и тоже кристалле с процессором.
Щас вот читаю книгу которую мне здесь посоветовали про Операционные системы, Таненбаума, уже 400 страниц прочитал, на 5й главе щас про устройства ввода-вывода. Вот.
Ну по ссылке написано что это биос переменные что я должен был подумать? Вообще об этих биосах или уефи что там щас я знаю только то что они делают тест устройств на исправность и передают загрузчику ос управление. Всё.
>>207835
Мерси, щас посмотрю
Видеокарта - это (внезапно) периферийное устройство, а значит обмен информацией с ней является вводом и выводом.
Дальше читай тут https://en.wikipedia.org/wiki/Memory-mapped_I/O
>процессор посылает сигналы на видоекарту через видео драйвер?
Что ты имеешь в виду? Видеодрайвер на CPU исполняется.
Ну я читаю книгу про операционные системы там написано что переферийное устройство содержит у себя плату на которой есть пзу. Воооот. В ядре операционной системе есть драйвер этого устройства который используя CPU подаёт на этот пзу сигналы и получает от него ответы. Воооотъ.
Да ладно всвё я уже понял читаю щас про видеокарты как этот gpu отличается от cpu чтобы хоть поверхностно представление иметь
>делают тест устройств на исправность и передают загрузчику ос управление
BIOS - Базовая Система Ввода-Вывода. Это программа (прошита в ПЗУ, исполняется на CPU) для простых унифицированных операций ввода-вывода. В первую очередь - для этого. А затем ещё и для инициализирующего теста периферии и дальнейшей загрузки ОСи.
О спасибо, чётенько объяснил. То есть bios это всего лишь программа который на цпу исполняется.
А я думал что bios микросхема она самостоятельна то есть там и процессор и память внутри и она сама по себе работает.
>про Операционные системы, Таненбаума
Так тебе сначала надо было про архитектуру машины читать.
Того же автора хотя бы http://libgen.is/book/index.php?md5=345C04FC70BD5CFD4A542CF620CC9038
Я читал книгу супругов Харисс цифровой дизайн и компьютерная архитектура, там ассемблер кстати на примере архитектуры mips или как-то так она называется показан был в основном. Чё стоит перечитывать архитектуру таненбаума?
Ну я в любом случае операционные системы пока не дочитаю к новой книжке не преступлю
На сайте intimcity имена фотографий в анкетах вот такие примерно
733824471.jpg
680239644.jpg
436613119.jpg
Раньше они были просто 01.jpg, 02.jpg и т.д.
Скажите что это за шифр и как его расшифровать, очень надо
>Денис Юричев: "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
Прямая ссылка - https://yurichev.org/b564f46f1c207b2dbc84a2bd4a41ed4c/
Есть у кого-то ссылка на самую, или почти, обновленную версию его книги?
По логике должен, запустится, биос считает gpt таблицу и передсаст управление загрузчику. В чём я обосрался?
https://www.chibiakumas.com/
хуя стильный сайтик
Мой ноутбук загружается в режиме uefi, даже специальный efi раздел есть. Таблица разделов жёсткого в gpt, тогда почему во всех системных параметрах в ноуте записано что у меня bios версия bios и т.д.?
>самую, или почти
Задонь ему бакс на патреон, что ты как нищеброд..
На либгене прошлогодняя лежит

Да, последняя, которую я находил, была датирована декабрем 2020 года. Ну, кто-то же должен сливать в сеть новые версии его книги, правда? Как-никак больше 300 патронов у него. Я нищеброд, да.
А сама прога для каких процессоров написана? Если для ms-dos, то вполне возможно, что выставить стоит 286. Что за программа?
Игра dark sun 1, в системках написано, что минималка для нее 386
Вообще, я уже гидру попробовал, она как-то лучше справляется или чего-то не так понял, ведь я ньюфаг
Ghidra определяет DSUN.EXE как 16bit real mode. Перед дизасмом екзешника не забудь пройтись по нему утилитой unpack, мало ли, а то он запакован.
В видео ничего не сказано про работу внутри процессора.
Тебе нужно почитать книгу вот эту https://microelectronica.pro/wp-content/uploads/books/digital-design-and-computer-architecture-russian-translation.pdf
Здесь про процессор подробно расписано начиная с самого маленького транзистора. Там он внутри состоит из миллонов транзисторов микроскопических которые образуют логические цифровые элементы И ИЛИ НЕ из них уже защёлки автоматы собираются, короче там просто не раписать, извини.
Собрал некоторые ASM-рилейтед ссылки. Выборка получилась однобокой, видимо (Разработка IBM PC X86 WIN).
Не охвачены темы: написание драйверов, виртуализация, микроконтроллеры, эмуляторы... (Т.К. не разбираюсь в этом. Не знаю, надо ли это вообще)
Не добавил ничего по инфосеку (пентест, хакинг,...), т.к. есть отдельный тред. Надо ли его упоминать?
Хоть шапка и получилась большая, но я не уверен, что это плохо. Пытался не упустить ничего ценного по теме. А то нынешние зумеры совсем одичали, не знают, что там внизу можно делать. Нет вменяемых подборок и программ даже для университетских курсов.
Давайте ваши советы: что добавить/убрать/заменить/передвинуть. Несите свежие ссылки на актуальный софт/книги/сайты. Критикуйте. Не перекатывайте пока.

Книжки по архитектуре совсем уж протухшие. Там издания 1975-198х годов. Я бы хотел что-нибудь предложить, да только сам не могу ничего достаточно годного найти по архитектурам.
Несколько лет назад, меня тут с говном пермешали за то, что я предложил Абеля добавить в шапку в треде. Мол, говно старое, нахуй тут MS-DOS не нужОн.
Подкину ссылок еще:
Ed Jorgensen - x86-64 Assembly Language Programming with Ubuntu
http://www.egr.unlv.edu/~ed/assembly64.pdf
Ed Jorgensen - MIPS Assembly Language Programming Using QtSpim
http://www.egr.unlv.edu/~ed/MIPStextSMv11.pdf
Я, вообще, начинаю сомневаться, нужен ли вдумчивый АСМ-тред на доске вкатывальщиков. Пошло он всё в пинду.
похуй.

Сделай нормальный конвертер он тебе полюбому поставит зачёт.
Логика такая:
Ты вводишь в консоль 2021, в памяти появляется значение 32,30,32,31.
На выходе надо получить MCMLXXXVI, это в памяти должно быть 4D,43,4D,4C,58,58,58,56,49.
Надо из 32303231 логическим путём получить 4D434D4C5858585649.
Вся логика на пикче, надо просто её написать ассемблеровскими инструкциями.
Но есть ньюанс, нельзя логически получить значение 4D434D4C5858585649 из 32303231. Поэтому надо получить другие значения, потом с помощью xlat преобразовать в 4D434D4C5858585649. А потом просто отобразить.
Лень думать если честно.
varB dw -1 это вроде 65535
и если поледить это число на, скажем, 5
то получится 3333h, а это уже хрень какая-то, неясно это положительное число или отрицательно.
Да и с 65535 непонятно какое число взято
В итоге читал так что аж самому захотелось какую-нибудь 98ю винду на виртуалке накатить. Ну короче 98se тупо не накатвыается потому что гипервизор не может корректно обработать служебные команды операционной системы и тупо куча ошибок и система не ставится, в интернете сказали что только первая редакция может встать, ну встала, да, тоже с ошибками но встала. Ну короче смысла от них, систему то они могут запустить, но она там в таком состоянии выходит что на ней врядли какую программу можно запустить корректно.
Не спасибо, я немного в другую область стремлюсь, итак дохуя всего учить, не до баловства с виртуалками вообще
3. Напишите инструкцию OR для логического сложения:
ж) содержимого регистра АН с данными по адресу WHEN, с сохранением результата по адресу WHEN.
Как я понимаю, WHEN это название переменной.
Очевидное решение
or [WHEN], ah
не работает, наверно потому что нельзя вернуть значение из памяти по адресу из памяти.
Возможно ли это вообще сделать одной инструкцией?
>Мой ноутбук загружается в режиме uefi, даже специальный efi раздел есть
У тебя GPT совместимый с бивусом. Бутинг начинается с бивуса, который загружает легаси MBR из первого сектора.
Таблица разделов MBR указывает на единственный раздел, который должен охватывать весь диск. А уже на следующих секторах - GUID таблица, которая в общем случае мапит все логические разделы диска
Понял, спасибо
Да блять я не могу ответить ему на тот же вопрос, почему затирается фраза, если в конце программы еще раз вывести че-то.
Еще вторую лабу не сдал арифметику, потому что там при больших значениях залупа происходит.
В общем еще работать и работать
Так ты сформулируй нормально вопросы здесь - тебе помогут.
Вот у нас есть система где физическое адресное пространство меньше виртуального. Допустим есть процесс (или группа процессов, что наверное не так важно), который занял всю main memory, т.е. количество пейджей адресного пространства процесса равно отношению размера всей памяти к размеру пейджа. Далее процесс запросил аллокацию памяти, соотвественно ось должна выделить еще стока-то пейджей (ведь аллокация происходит пейджами, а не байтиками?)
Значит далее аллокатор сейвит в диск в( swap файл или раздел) один из пейджей, попутно выставляя absense битик, и на его место кидает новый?
И типа таким образом за счет swap пространства мы добились увелечения адресного пространства всей системы?
где я не прав?
алсо какой смысл пейджинга и виртуальной памяти в общем, когда физической памяти больше виртуальной? ведь тогда все пейджы могут распологаться в main memory
>физической памяти больше виртуальной
Не понял тебя.
Виртуальная память - это буквально механизм трансляции эффективных адресов в физические. Это нужно, чтобы управлять памятью т.е.
свободно перемещать части памяти задачи непрозрачно для исполнения этой задачи и, в конечном итоге, для изоляции задач.
>>223004
>добились увелечения адресного пространства
Размер адресного пространства фиксирован для конкретного ядра и никак не зависит от общего объёма доступной RAM. В страничный файл, по задумке, выгружаются не востребованные на данный момент страницы.
>Не понял
Сорян, я про адресные пространства.
Т.е. к примеру размер входа mmu 32 битика (итого 4 ГБ), а установленной памяти больше 4 ГБ
>Виртуальная память - это буквально механизм трансляции эффективных адресов в физические.
Сам механизм трансляции ясен как божий день. Только вроде на вход MMU идет логический адрес. Эффективный это вроде как оффсет внутри пейджа
>Это нужно, чтобы управлять памятью т.е.
свободно перемещать части памяти задачи непрозрачно для исполнения этой задачи и, в конечном итоге, для изоляции задач
Я понял концепцию set working. Я не понял, есть ли выигрыш в бОльшем количестве памяти. Попробую задать вопрос покороче и в более глупой форме: может ли set working процесса(-ов) быть суммарно больше, чем размер физической памяти?
>В страничный файл, по задумке, выгружаются не востребованные на данный момент страницы.
Это даже страничный файл, а не своп, как мне показалось? Оке.
>Эффективный это вроде как оффсет внутри пейджа
Я имел в виду x86-64, конечно. В Long Mode эффективный и линейные адреса совпадают.
>концепцию set working
Working sets, видимо.
>есть ли выигрыш в бОльшем количестве памяти
Не вижу смысла, если часть RAM процессор не сможет адресовать, и она останется недоступной для него. Кроме того, в адресное пространство не только RAM отображается.
И ещё, пейджинг, разумеется, позволяет сделать так, чтобы суммарная выделенная память всех задач (и даже только одной задачи) была больше объёма доступной RAM. Но это не тоже самое, когда RAM больше адресного пространства.
Сори, я может не совсем пони, а зачем у тебя дергается вывод AskClient в самом конце проги (уже после лупа с выводом результатов и отступов)?
Я к тому, что при выводе отступов (пробел + 0Dh,0Ah,'$' это и есть тот перевод каретки о котором говорил) у тебя курсор переносится к началу следующей строки, но в самом последнем выводе этого нет - выходит последующая печать на экран должна засрать предыдущий текст
>а зачем у тебя дергается вывод AskClient в самом конце проги (уже после лупа с выводом результатов и отступов)?
Да это препод попросил в конце еще раз вывести проверить затирается там че или нет.
А если затирается, то почему не полностью, как это всё объясняется
>>223935
А всё забейте. Извините что отнял ваше время.
Ничего там не затирается все как надо работает, я не помню почему когда в первый раз запускал по его просьбе что-то не так выводилось. Может я и препода в заблуждение ввёл, он просто неизмененный код смотрел на доверии спросил по телефону (удалёнка) затирается ли там что или нет, я ответил ему что затирается.
еще раз извините
Как и всё за фаерволом, очень долго грузится.

Есть некий модуль DXE, исполняется внутри UEFI загрузки.
Модуль считает некий хеш на основе 20 байт серийного номера HDD.
Если я правильно понимаю код, то в 4й снизу строке произойдет оверфлоу PasswordBuffer, потому что byte ptr [rcx+r11] будет явно больше 31, буфер 32 байта.
Коротко - он считает сумму всех байт в s/n жесткого диска, делает с ней XOR 0x1f, и потом пытается поочередно засовывать каждый байт из Diskserial в локацию в PasswordBuffer, выраженную index ^ сумма_байт ^ 0x1f
Что то не сходиться. Потому что код работает.
Логично если бы там было & 0x1f, но там реально ^ 0x1f
Средствами дебага UEFI на живой машине пока не располагаю - пытаюсь понять в теории по коду
>Если я правильно понимаю код, то в 4й снизу строке произойдет оверфлоу PasswordBuffer, потому что byte ptr [rcx+r11] будет явно больше 31, буфер 32 байта.
Я понял что прога просто положит 20 раз байт по адресу PasswordBuffer + поксоренный rcx.
movzx eax, r8w ? там типа в последнем байте серийника сумма какая-то зашифрована? Или зачем она его ксорит?
так RCX указывает offset от начана PasswordBuffer
и он будет > 31 возмжоных позиций.
r8w будет перед movzx eax, r8w будет уже содержать сумму всей байт в серийнике, ну если я конечно правильно понимаю.
Последние 5 бит суммы инвертируются, наверное как часть работы хэш-функции.
И ты уверен, что размер хэша - 32 байта?
Максимальное значение серийника fffff fffff fffff fffff, значит максимально возможная сумма - 300 (15*20)
атсаси у тракто
Возможно размер хэша примерно равен этому значению и уже инициализирован чем-то, а байтики из серийника раскидываются по этому полю. Других версий у меня нет
Размер "хеша" - он же пароль ATAsec 32 байта
Размер серийника 20 байт, то есть макc сумма 20 * 0xff = 0x13ec (5100)
Проблема в том, что ^ 0x1F как бы ни на что не влият при макс возможном значении 5100
Тут логически должно быть & 0x1F, это как раз ограничивало бы это самое значение в нужном нам диапазоне 0...31
Но там реально XOR, а не AND
Вот я и пытаюсь понять что упустил.
Пока приходит в голову только то, что это очередная хитрая уловка, и происходит изменение этого кода во время исполнения, из какого то другого места до его вызова.
мэх, да нахуй ему сдался я
Приветствую, работяги. Обьясните, пожалуйста, малиновому про YASM. Какие перспективы? Какие отличия от других ассемблеров? Годнота ли вообще? NASM или YASM?
Есть где почитать разные статейки по взлому защищенного ПО, про устройство всяких пакеров, про написание анпакеров и т.д и т.п
Существенная. По крайней мере, 32-bit mode программы не работают в 64-bit mode, и наоборот.

Но нахуя оно нужно и где это локализуется - я так и не понял
Короче ломаю одну игру через артмани, нашёл адрес значения, но когда меняю оно изменяется на визуальное и возвращается на исходное. Стал в отладчике отслеживать откуда идёт запись в эту ячейку памяти. И нашёл только 2 строчки, как попасть с верхней строчки на предыдущую операцию с ebx+00000718 мне нужно знать как туда инфа попала. Может есть какой-нибудь поиск? или отслеживание по регистру я хз Там много инструкций очень просто
>>232871
Алсо допишу сразу что игра полностью автономная и выполняется на компе никаких удалённых серверов нет и искомое значение также хранится в оперативке во время выполнения ни из каких файлов она не читается. Мне нужно просто отследить движение инфы по регистрам и операции в ходе которых она получается найти.
поставь breakpoint на 0BDEBС23
посмотри чему соответствует адрес в памяти EBX+0x718
поставь watchdog на его изменение
TASM

Как он это понял?
во-вторых, в чем отличие, мне нужна схема ПК
мерси, попробую отпишусь
Препод еблан какой-то на персональных компьютерах 1 процессор установлен нахуй в 99% случаев. Ну или может быть он ядра в процессоре считает за отдельный процессор я хз или он ещё за процессоры считает всякие микросхемы, процессоры на видеокарте, микросхемы на сетевой карте я хз.
Пиздец вам эти совковые преподы мозги ебут конечно в ваших вузиках и вот вместо того чтобы делом заниматься асмы дрочить ассемблировать, дизассемблировать человек носится пол года доказываяя\пытаясь понять старого маразматика что за какую-то мелочь к которой он приебался
>Препод сказал что это не структурная схема для ПЕРСОНАЛЬНОГО компьютера. А для однопроцессорной системы.
А персональный компьютер это что у нас? никак сервер мультипроцессорная система?

480x360, 0:02
>Препод сказал что это не структурная схема для ПЕРСОНАЛЬНОГО компьютера. А для однопроцессорной системы.
Ну так в схеме нет ничего ПК-специфичного. Т.е. это может быть и не ПК.
Серьезно, если это тупой вопрос, то простите, но нашел я только как делать инверсия в заранее известных позициях.
>Какое отношение это имеет к АСМу?
Потому что АСМ это отражение мышления. У высокоуровневых такого нет, у них отражение мышления разработчика языка, но не программиста. Все типа ищут решение во вне, а надо искать решение в себе. И для этого надо уметь правильно рассуждать.
По желанию.
Может тоже в шапку?
А что делать-то хочешь? В сущности yasm переписанный nasm под BSD лицензией.
При вводе с клавиатуры, отсекай символы, если у тебя посимвольно читаются данные, через int16h:
http://www.techhelpmanual.com/230-int_16h_01h__query_keyboard_status___preview_key.html
И это круто!
Да, короче, я ему сделал джампом, сравнивается аски код если меньше или больше чисел то джамп.
Он мне сказал типа надо чтобы символы оставались а заменялись только числа.
Как можно это сделать когда у меня римское число может хранить 6 байт? '-VIII-' хотел сначала xlatb, но он только для 1байтовых.
То есть fv123 в "fv-I--II--III-"
https://pastebin.com/D6bqXisg
Предполагаю удалить раздел по ретрокомьютингу - слишком обширная тема для этой шапки. Как думаете?
Денис Ритчи
Бьёрн Страуструп
Эндрю Таненбаум.
Посоветуйте книгу, пожалуйста, по ассемблеру(на английском) где разбираются подробно все эти команды регистрцы и т.д.
Я хотел Э. Таненбаума, но его книга из шапки архитектура пк, там много уделено внимания микроархитектуре, логическим винтелям и всяким транзисторам, резисторам. Хотелось бы онли команды, потому что про винтили и микроархитектуру я уже читал.
И ещё вопрос а что щас актуальнее учить x86_64 или x86_32 сильно они синатсически отличаются?

Ильфак, что ты делаешь, ахаха, прекрати
Хер пойми на сколько подписка и все тот же конский прайс - лавры Адоба спать не дают?
>>237947
>по ассемблеру(на английском)
Кип Ирвин
>subscripiton model
У них там щас новый тренд на всё, включая автомобили вводить подписку. Даже тойотаа вскоре планирует запустить тачки по подписке: ты покупаешь машину и платишь каждый месяц сколько-то бабок, если перестаёшь платить ключ блокируется и машиной ты пользоваться не можешь, нет подписки.
Спасибо, за книгу.
Причина вопроса: нужно читать некоторые данные из определенного файла при бутинге, а я не пойму, можно ли смело читать прямо через ай-нод (заранее прописанный в МБР), или желательно полное имя файла, так как ай-нод в ходе других манипуляций с ФС может быть перезаписан?
>>237152
Таненбаум конечно охуенен, если оценивать по охватываемому материалу, но подчас слишком много отступлений. Ну вот зачем студентоте знать, сколько стоил юнит такой-то памяти в конце 70-х.?
Лучше Таненбаума книг я ещё не читал, по его книгам больше всего инфы получил. Если ты стремишься в системное программирование то курс Эндрю Таненбаума обязателен ящитаю.
Она в PDF скачивается, если поискать.

Как называется эта болезнь? Как её лечить? Постоянно проверяю в дебагере эту хуйню.

Где глянуть про гидровский декомпилятор?
Какие архитектуры есть?
гонит в c++?
Сколько ресурсов компа надо чтобы пользоваться гидрой?
Как уберечься от зондов?
>Randall Hyde: The Art of Assembly Language
Так в ней ведь HLA рассматривается. Это какая то высокоуровневая дичь а не Asm. Как это в RE поможет?
Чем какая нибудь из этих хуже?
https://www.goodreads.com/en/book/show/35608849
https://www.goodreads.com/book/show/23969110-modern-x86-assembly-language-programming
Аноны, а реально найти себе репетитора за вменяемые деньги который бы провёл мимо подводных камней?
учусь в местной шараге, вроде бы учат целый семестр всякой лаже типа mov, cmp и проч... но нихуя не понятно(
Оригинальный мертв, живу только клон.Ну и за статьями на васм.
в исходниках, так все что в комплекте с хорошими комментами.
Это копия, сохраненная 1 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.