Spectrofon
#15
04 октября 1995 |
|
Система - продолжение темы "Недокументированные команды процессора Z-80".
┌──────────────────────────────┐ │ ─────── СИСТЕМА ──────── │ └──────────────────────────────┘ Продолжая тему недокументиро- ванных команд процессора, подня- тую в одном из прошлых номеров нашего журнала, сегодня мы пуб- ликуем ответ Cтанислава Ефимова на письмо Сим Олега, в котором продолжается обсуждение этой те- мы. Редакция журнала готова выс- лушать и другие мнения на этот счет. Станислав В.Ефимов (Fanatic Stas) E-Mail 2:5020/525.29@FIDOnetg КТО КОГО "УБИЛ НАПОВАЛ" ИЛИ УЧИТЕСЬ ЧИТАТЬ НАЗВАНИЯ, А ТАКЖЕ ПОСЛЕСЛОВИЯ! В начале мая редакция "Спектрофона" получила письмо читателя, часть которого сталa откликом на опубликованную в "S"N11 статью в разделе "Систе- ма". Я с интересом прочитал это письмо. Отдельные позиции этого письма вызвали у меня некоторое (если не сказать больше) недоу- мение, и кое-что захотелось про- комментировать. Хочется наде- яться, что читателям "Спектрофо- на" будет интересно... Начну с P.P.S Олега: Sim O.R: "P.P.S: Если Вам будет интересно, я хотел бы продол- жить тему недокументированных команд и подготовил материал, предлагаемый ниже. Если неинте- ресно - не смотрите." FS: "Ничего подобного - интерес- но!" Олег (О): 1995 Sim O.R. and SERGE, Volgograd. Поводом для подготовки это- го материала стало практически одновременное появление статьи Fanatic Stas'a в журнале 'Спек- трофон' и информационной прог- раммы Волгоградского программис- та SERGE под названием 'Top Secret'. Обе они посвящены недокументиро- ванным командам Z-80. Первая - полна зияющих пробелов, вторая - очень интересная, но содержит ряд неточностей. Складывается интересная ситуация, когда мно- жество людей знает про эти ко- манды, активно их испольэует, но не спешит делиться секретами. Это вполне понятно: применение недокументированных команд наи- более эффективно в кодирующих программах (оставляют 'темный уголок' для защиты?). Но все же настало время немного рассеять туман. Я ставил своей целью сис- тематизировать разрозненные све- дения по этому вопросу и ни в коем случае не претендую на лав- ры первооткрывателя. FS: По поводу 'зияющих пробелов': внимательно прочтите послесловие к тому материалу... А вообще: лучше немного не дого- ворить, если не твердо уверен, конечно, чем давать 'сырой' ма- териал, который может ввести в заблуждение или вообще завести в другую сторону (это я про статью, посвященную TRDOS, в од- ном из первых номеров "S"). С 'темным уголком' не соглашусь: все что я видел из программных (впрочем, как и основанных на регистрах ВГ93 - в смысле, дис- ковых) защит на сегодняшний мо- мент, позволяет мне сделать вы- вод, что знать недокументирован- ные команды вообще необяза- тельно! Эти команды не способны сильно затруднить доступ к защи- щенному коду, важно лишь знать КУДА 'копать' и КАК. ЛЮБАЯ защи- та имеет слабую сторону, там и надо копать (а не бить в лоб). Вообще, степень надежности защи- ты в целом определяется степенью защиты самого слабого ее звена (я кого-то процитировал, а кого - не помню). Это очень важно знать программистам, которые ставят подобные защиты, хотя на "Спектруме" такую защиту, види- мо, поставить не удасться. Можно лишь максимально затруднить путь взломщику... Что и сделано в свежайшем релизе Step'а - Звездном Hаследии... Я не буду продолжать эту тему, поскольку уважаю Авторов Программ и не хо- чу плодить начинающих 'взломщи- ков' (термин hacker я в данном случае не употребляю, так как все что творится сейчас на Спектруме относится исключи- тельно к теpмину Software Piracy). O: Начнем с того, что не будем рассматривать набившие всем ос- комину операции над половинками индексных регистров. Они давно и прочно стали достоянием широкой общественности. С командой SLI, тоже, похоже, разобрались и за- полнили восемь нахально пустую- щих клеточек в таблице префикса CB. Поэтому есть смысл перейти сразу к командам, описания кото- рых пока еще не не опубликованы нигде (кроме, частично, в прог- рамме 'Top Secret'). ДУБЛИРОВАННЫЕ КОМАНДЫ. Прежде всего, дублированные команды - это такие хитрые ко- манды, которые представляются не одним, а двуме и более кодами операции (КОП). Команды эти общеизвестны и опи- сания не требуют, достаточно посмотреть в таблицу. Команда NEG, например, может устанавли- ваться восемью разными КОП, а мониторы-отладчики 'понимают' только один: ED44! Несмотря на это все восемь делают одно и то же, инвертируют аккумулятор. Об- ратите внимание на парочку ко- манд, которым не нашлось даже подходящего мнемокода и действие этих команд объяснено в снос- ке... FS: Здесь я прерву изложение Олега и приведу мой аналог большой таблицы, которую нарисо- вал автор. Трудно включить ее в этот текст, в ней много пустого места, к тому же ширина строки в 32 символа сильно ограничила мою фантазию... Надеюсь, что мое чтение этой таблицы - правильное, и возмож- ные ошибки будут на 'совести' автора. Я также 'выкинул' из нее все команды, набившие оскомину, типа EDB0 (LDIR) Итак, недоку- ментированные команды (все зна- чения - шестнадцатиричные). Сна- чала ED, далее: 54,64,74,4c,5c,6c,7c - NEG; 55,65,75 - RETN; 5d,6d,7d - RETI; 66,4e,6e - IM 0; 76 - IM 1; 7e - IM 2; 70 - аналог {IN A,(C);OR A} по результату OR выстав- ляются флаги S, Z, P; 71 - аналог {LD A,0; OUT (C),A} регистр A сохраняется. Время выполнения двух последних команд - 12 тактов. ДВУХПРЕФИКСНЫЕ КОМАНДЫ. Самая обширная группа ко- манд. В общем виде команды из этой группы представляются в ви- де: 1 байт - префикс DD или FD 2 байт - префикс CB 3 байт - смещение 4 байт - код команды Работают эти команды очень интересно. Hапример, такая пос- ледовательность байт: ddcb0100 будет иметь вид RLC B,(IX+1). Сначала действие (RLC, в данном случае) производится над ячей- кой (IX+1), а затем результат копируется в соответствующий ре- гистр. Команды, работавшие раньше с (HL) результат никуда не перегружают. Команды серии BIT только тести- руют биты по адресу (IX+n) и выставляют флаги в F. Поэтому они дублируются по восемь раз, т.к. независимо от регистра, над которым раньше производилась ко- манда, здесь подставляется (IX+n). Особенно 'повезло' ко- манде SLI. Мало того, что она сама недокументированная, но еще и может выполняться 'левым' спо- собом. Высказывание Fanatic Stas'а, что приведенные команды можно использовать с полезностью не большей NOP, убило меня наповал. Интересный получается NOP, если он активно изменяет содержимое памяти и регистров! FS: Я могу еще раз повторить фразу насчет 'полезности', одна- ко, в контексте предыдущей статьи. Hадеюсь, что не убью Вас наповал, если скажу, что знать дублированные команды мне сов- сем необязательно. Зачем мне, как программисту, знать что су- ществует энное количество NEG или IM2? Две команды, к которым не нашлось мнемоники, я вообще не знаю, куда 'приткнуть' в свои программы, и, уверен, что немно- гие смогут найти им пpименение. А по поводу RLC и ко. могу ска- зать, что эти команды мне хоро- шо известны и не являются по су- ти недокументированными. Для того, чтобы их 'раскусить' необходимо лишь сделать шаг от LD IX,nn, т.е. от простейших ко- мандах с префиксами (получается, что LD IX тоже недокументирова- но?). О: Возьмите, к примеру, програм- мы С. Ханциса 'Screen Manager', 'Super List' и т.д., и для обще- го развития раскодируйте их. Если у Вас это получится, то пе- ред Вами предстанет живой при- мер кодировщика, прекрасно вы- полняющего свое предназначение, используя как раз, так называе- мый, 'NOP'. FS: Я уже написал, что в преды- дущей статье, как и, надеюсь, во всех последующих, опираюсь на программистов, а не на хакеров. По моему убеждению, большинство (читай - все) из тех, кто вообще приложил руку к ассемблеру, пи- шут подобные кодеры исключи- тельно для себя, для собственно- го самоутверждения, поскольку серьезной мозговой атаки не один из них (кодеров) не выдержит. Я же уже давно 'на общественных началах' не занимаюсь, как пос- тановкой, так и снятием (каюсь - не пинайте ногами) всевозможных защит... О: Впрочем, чего еще можно ожи- дать от хаккера, не умеющего толком переключать страницы в режиме 128k. FS: Hу наконец-то... 'Hаехал'... И чем я Вас так обидел? Hемного же Вы видели моих программ, Олег, увы, раз Вы делаете такой вывод! Пару лет назад Спектрум купили? По поводу переключения страниц в двух (Stifflip, Deactivators) программах я расскажу как-нибудь попозже, если будут просьбы, но, ей-богу, это весьма поучительная история, связанная с проверкой некоторых моих подозрений в честности некоторых людей... Скажу лишь, что спустя две неде- ли после появления 'левых' прог- рамм выпущены их 'правильные' версии... Мне не повезло, что "Спектрофону" Deactivators, как, впрочем, и мне, так понравился. Не выносите вердикт заочно, гос- пода! O: Интересная концепция, приме- нение двухпрефиксных дает нам две полные таблицы кодирования, т.е. 510 КОП (почему 510, а не 512, я не понял... - FS), нигде толком не описанных. Вкупе с дублированными команда- ми, командами, работающими с по- ловинками регистров и командами SLI, недокументированные команды по численности приближаются к основному набору команд! Причем, вероятнее всего, это не предел, вглядитесь в таблицу ED, в ней еще столько 'белых пя- тен', что вполне вероятно появ- ление новых и новых команд. Кто до конца знает старину Z80? В настоящее время особый интерес должны представлять недокументи- рованные биты флагового ре- гистра. Hасколько мне известно, еще никто не предпринимал фунда- ментальных исследований в этой области. Факт только то, что не- которые команды при некоторых условиях изменяют эти флаги. Мо- жет быть кто-нибудь выскажется по этому поводу? FS: Мне бы тоже хотелось, чтобы кто-нибудь 'покопал' Z80, но увы, Олег, Ваше письмо единственное с материалом, кото- рый вызывает интерес. Откликов, правда, намного больше - это ра- дует! Я уже затронул вопрос фла- гов в предыдущей статье, хотя, видимо, лишь немного. Жаль, что Олег не привел ис- точников своих знаний, посколько его материал, я надеюсь, не пол- ностью 'срисован' с программы 'Top Secret', которую я не ви- дел. Хотелось бы знать источни- ки, откуда появилась такая ин- формация, также и в 'Top Secret'. Уверен, что такие ис- точники все же были, посколько догадаться, сколько выполняются ED70 и ED71, мне кажется, невоз- можно. IM0 и IM1 также плохо поддаются дифференцированию. Похожая ситуация и в случае с RETN, RETI, хотя здесь еще, пpавда не без тpуда, мне удасться их отличить... "S": Приглашаем всех, интересую- щихся данной проблемой, выска- заться со страниц нашего журна- ла. Надеемся, что общими услили- ями мы докопаемся до истины. ЖДЕМ ПИСЕМ! * * *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября