Search
Write a publication
Pull to refresh

Comments 26

Спасибо за статью. Буду перечитывать.

Самое интересное будет в третьей части - практика. Первая часть подготовка инструментов и предварительный анализ, вторая часть - работа с информацией: RBIL, Art, мануалы. К третьей части нельзя подходить без первых двух.

Frame Segment и Global Segment - дополнительные сегменты, используются в 64-битной архитектуре

Ну, тут какая-то ерунда написана, i80386 появился за 18 лет до появления x64 (у Intel), так что два дополнительных сегментных регистра решали проблему дефицита сегментных регистров общего назначения (CS и SS, все же, специализированные). Особенно этот дефицит был заметен в защищенном режиме, т.к. влиял на производительность, поскольку тут в регистры записывался не адрес сегмента, а дескриптор, загрузка которого требовала еще множества телодвижений с таблицей дескрипторов и страниц виртуальной памяти.

Регистр SP я бы не относил к регистрам общего назначения, все ж таки он специальный. У самого Intel в документации регистры разделены на Data Group и Pointer and Index Group. Неплохо было бы указать, что стек растет со старших адресов к младшим, это важно.

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

Может быть я пропустил, но не вижу, чтобы где-то указывалось, с какими сегментами по умолчанию работают разные указательные/индексные регистры.

IP ... не доступен программисту напрямую.
ЕМНИП разрешено, хотя могу путать
POP IP

push ax
retn
к слову ret это де-факто и есть pop ip :)

  1. Да, FS и GS появились раньше, но они не используются в 32 битах так, как они используются в 64 битах, там куча ограничений и именно из-за них, не стал зацикливать на них внимание. Я много DOS игр "развернул" и с ними не сталкивался, хотя о них знаю;

  2. ESP (SP) вот сами прочтите здесь (386™ SX MICROPROCESSOR PROGRAMMER'S REFERENCE MANUAL, "2.3.1 General Registers", p.2-7). Как я писал ранее - не хочу и не буду устраивать холивар;

  3. Спасибо за Вашу критику и внимание, но тема несколько иная - здесь про реверс, а не изучение тонкостей ЯП Assembler. Именно для изучения Assembler я и дал ссылку на "библию" - "The Art of Assembly Language".

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

P.S.: Небольшое интервью Хайда - "The rebirth of assembly language programming" (October 13, 2003)

У меня есть такие варианты игр для анализа: Все изображения были взяты с https://www.old-games.ru

Commander Keen in Goodbye, Galaxy (idSoftware, 1991)
Metal Mutant (Silmarils, 1991)

И куда же без Легенд, которые установили новые жанры?

King's Bounty (New World Computing, 1990)
\
\
Dune II: The Building of a Dynasty (Westwood Studios, 1992)

Дамы и Господа, можете предложить свои варианты из диапазона лет 1987-1999. Есть одно, но важно уточнение, а именно: если игра будет упакована и/или защищена, то эту игру отложим в сторону. Но в любом случае, я о ней упомяну. Учитывайте то, чем "младше" игра, например 1996 год, тем больше шансов наткнуться на упаковку и/или защиту

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

Metal Mutant наиболее интересна, остальные уже давно разобрали на атомы.

  1. Первые версии PKLite легко снимаются, а последние нет. У меня только в арсенале 5 видов распаковщиков PKLite

  2. Одно дело, когда кто-то взял с делал свою версию, как пример Open Dune. А другое дело именно научить реверсу игр, а не ждать пока какой-то другой человек реверснет именно "твою любимую игру". Так можно прождать до конца веков

Могу предложить для разбора F29 Retaliator (AKA Retal) авиасимулятор от Digital Image Design. Из особенностей, корректно работал от 286 до процессоров на 775 сокете, плюс одна из первых игр на PC предоставивших возможность мультиплеера на двух компьютерах не только по по нуль-модему, но и через модемное соединение по телефонной линии.

Хорошая идея. Хотя я сам лично, если брать все симуляторы тех времён, играл только в Comanche 3. С близким другом, под пивком проходили самые сложные миссии, а на трезвую голову, ни разу эти миссии и не прошли...

Нашел: F-29 Retaliator (1990, Digital Image Design)

IMHO Команч 3 для воссоздания, да и для анализа будет через чур тяжел. Во первых защищенный режим DOS Extender. Во вторых их игровой движок VoxelSpace 2 в котором мог остаться неиспользуемый ко на анализ которого уйдет какое-то время и силы. В третьих, вполне возможно что код игры модифицировали под Win95 и DX, так как это было время перехода от DOS к Win9x

Это понятно, что тяжелый и будет ой как не легко. Просто это будет для меня новый опыт с симуляторами.

Поэтому я и ищу тот вариант, который был бы точкой старта для новичков в рамках обучению реверсу с точки зрения систематического подхода и анализа, а не "force reverse" (реверс через "силу")

Вот что по настоящему мне хочется и думаю осенью начать над ними работать, это: Gene Wars (1996, Bullfrog Productions) и 7th Legion (1997, Vision Software)

"... Нормальную межвидовую вражду никто не отменял, а что соседского инженера искусали, так то несчастный случай... мы ему очень соболезнуем... правда-правда ..." (из коммента на old-games.ru)

"мультиплеера на двух компьютерах не только по по нуль-модему, но и через модемное соединение по телефонной линии."
Напомнило - Descent - 3D леталка - одна из первых игр с мультиплеером по сети.

F29 Retaliator это 1989, а Descent это 1995 год, между которыми уместились Doom/Doom2/Heretic/NetWars/RoTT/MagicCarpet/WarCraft/C&C/TTD/Dark Forces :)

Во, благодарю что напомнил. Надо будет попробовать поиграть в ремейк Heretic

Старый добрый ассемблер, обожаю. Только вчера писал функцию на FPU для многочленов Чебышева (потому что на высоких порядках двойной точности уже не хватает).

Неплохо было бы при упоминании прерываний описать механизм действия, рассказать про "таблицу прерываний", упомянуть разницу в маскируемых/немаскируемых.

Можно, но в рамках обучения ассемблеру, пример такой статьи на Хабре - Низкоуровневое программирование под 8086 для любопытных, часть 1 ( @AGalilov- на мой взгляд - хороший автор ). А если еще копнуть чуть поглубже, то есть два вида обучения работе с ассемблером:

  1. Классическое - обычное обучение, через книги, первый "Hello, world!" и т.д.

  2. Через реверс и постепенно добавляя знания

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

Благодарю за добрый отзыв :)

Sign up to leave a comment.

Articles