Важная информация

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 25

Тема: Чья фишка? (приём программирования)

  1. #11
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я про такое узнал из файла рекомендаций к проге - перекомпилятору MSX1 картриджей под MS-DOS. Игры на MSX1 картриджах такое часто содержат.

  2. #12
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ясно. В общем, можно смело юзать без зазрения совести =)
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  3. #13
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,395
    Спасибо Благодарностей отдано 
    304
    Спасибо Благодарностей получено 
    594
    Поблагодарили
    440 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #14
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    HardWareMan, вот как ситуацию вижу я. В связи с интересом исключительно к 8-биткам и их миру той эпохи, меня не интересуют средства разработки (и реверс-инжениринга) на писи, поэтому я не в курсе что умеют современные навороченные дизассемблеры (возможно там уже подключен искусственный интеллект, который сам разгадывает хитрозапутанные задумки кодеров?), а пользуюсь по-старинке простым дизассемблером на 8-битке (мне так "спортивнее"). Ранее (давно) это был дизассм из пакета Микрон, потом я от него "устал", "психанул" и написал свой, для меня более удобный.
    Так вот, всё что умеет дизассемблер в плане сервиса: разделять код и блоки данных, последние ему надо указывать в явном виде, т.е. их человек заранее сам должен вычислить и указать дизассму участки адресов, где не код, а DB'шки.

    В результате имеем следующее. Идеальный случай - когда прога состоит только из кода (голову греть не надо вообще, кормим исходник дизассму и он всё делает сам, в лучшем виде). Хороший случай - мухи и котлеты отдельно, т.е. есть блок кодов, а в конце болк данных, причём данные текстовые, начало которых легко и непринуждённо обнаруживается по "F3": <код>... <здесь был Вася/0>... end. Мы указываем дизассму на этот блок данных и с радостью обнаруживаем где-то в коде полученного листинга что-то в духе: LXI H,M_TEXT; CALL MF818. Собственно, на этом халява заканчивается.

    Далее идут более сложные случаи, когда посреди кода встречаются переменные, данные (нетекстовые). Частично такое вычисляется по "F3" опытным глазом (со временем уже в кодах понимаешь, где осмысленный код ВМ80, а где "какая-то лажа"). Но одиночные вставки констант/переменных всё равно невозможно обнаружить беглым взглядом, поэтому приходится дизассемблировать многократно, причём каждый раз довольно глубоко вникая в код.
    Иногда лажу вижно практически сразу, когда внезапно начинается несвязный набор команд. Но, как правило, явным признаком лажи является т.н. "орфан" код, т.е. блоки кода или данных, идущие после RET или JMP, на которые дизассм не сгенерил метки, т.е. нигде в коде на эти блоки нет переходов/ссылок. По логике таких блоков быть не может (кроме всяких сигнатур разработчиков).
    Геометрически растёт геморрой при многократном перемежении кода/данных.

    В сабжевом случае как раз и получается, что вроде как код логически связный, данные осмысленные, но они многократно перемежаются и не имеют меток. По-началу вообще полнейший ступор! Особенно удивляет незавершённый код: CALL XXX; <текстовое сообщение>. Понимаешь, что вот вообще нифига не понимаешь
    Даже самомодифицирующийся код такого ступора не вызывает.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #15
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Ну и наверняка же у автора был макрос в духе
    Код:
    .macro PRINT(x)
    CALL PRINT_MESSAGE
    DEFM x
    .endmacro
    и он печатал все сообщения простой читаемой конструкцией PRINT("Hello, World"). Это очень удобно и код становится намного понятней, чем если бы там были ссылки на сообщения из отдельно лежащего массива строк.
    На самом деле это и без макроса намного более читаемый код. А то, что читаемость кода повышает скорость разработки - это общеизвестно.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  6. #16
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,395
    Спасибо Благодарностей отдано 
    304
    Спасибо Благодарностей получено 
    594
    Поблагодарили
    440 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Denn, ну я когда ED^7000 разжевывал на Специалисте под Микроном (хотел поменять местами действия РУС/ЛАТ и СТР, в редакторе РУС/ЛАТ выбирал регистр а СТР язык, что не логично ваще) сделал проще. Мы как раз только закончили подключение Консула к Спецу, я просто взял и скормил Консулу весь листинг из дизасма. Потом посидел пару дней над листингом, делая пометки и, в итоге, в редакторе текстов Практик (да-да, редактировать кишки редактора им же самим ) делал соответствующие исправления. Затем собрал ассемблером и все работало. Ну а дальше дело техники. Кстати, сборка 2КБ кода (~28КБ текста) занимает примерно минут 5.

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn
    мне так "спортивнее"... был дизассемблер МИКРОН, потом он меня "достал" и я написал свой дизассемблер, для меня более удобный
    Тяжёлый Вы выбрали вид спорта.

    Мы тут конечно все "сходим с ума по своему" и я тоже люблю использовать только свои программы (например, хотя это уже и не требуется, пишу свой ассемблер для 6800, впрочем это несложно, т.к ранее написал ассемблер 6502, переделка проста). Это даёт контроль и возможность добавить те свойства, которых нет в чужом ПО (например, разве может чужой ассемблер транслировать исходник для КР580 в объектный код процессора 6800?).

    Но всё-таки для спорта разумно выбирать интересные задачи (творчество). А дизассемблирование примитивным дизассемблером - это удовольствие ниже среднего, а для программы написанной извращённо, иногда это просто неразрешимая задача. Это совершенно неинтересно, это просто "убой своего времени", т.к можно многими днями трахаться, портить себе нервы, а в итоге работа сводится к тому же самому лобовому анализу программы. А почему тогда не дизассемблировать вручную с помощью таблиц кодов, это ещё более экстремальный спорт?

    Задачу интерактивного дизассемблирования решил в 1979 году Вард Христенсен, написавший RESOURCE для КР580 (позже другие люди сделали версию и для Z80). А интерактивная IDA ещё удобнее, т.к умнее и спасает от многих ошибок. При интерактивном дизассемблировании большой плюс в том, что распознав назначение подпрограмм или участков кода, мы сразу назначаем осмысленные имена меток, в итоге получается почти исходник. В итоге, то что примитивным дизассемблером делается за многие дни каторжного труда в IDA делается за пол часа.

    Грамотный дизассемблер должен для каждого "сиротского" куска кода искать нет ли загрузки этого адреса в регистры, например в HL (часто делается LD HL,ADDR : PUSH HL, чтобы по RET из разных ветвей выполнить один фрагмент, обычно POP-ы). А может ли Ваш дизассемблер помочь, когда совершенно осмысленно (ради экономии байтов) делается JMP в середину кода команды?

    По счастью искусственного интелекта в дизассемблеры ещё не добавили. Чтобы из любого кода мгновенно получать исходник с комментариями и осмысленными метками. Скорее всего, лет через 10 это будет, но к тому времени мы все или уже будем в "матрице" работать батарейками или терминаторы будут добивать последние остатки человечества.

    Это не шутка, т.к, несмотря на призывы фантастов и ведущих учёных, тьюринговая полиция до сих пор не создана, а безответственные инженеры на службе корпораций быстрыми темпами приближают апокалипсис, закончивая разработку враждебного человечеству искусственного интелекта.
    Последний раз редактировалось barsik; 29.07.2017 в 17:16.

  9. #18
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    да-да, редактировать кишки редактора им же самим )


    У меня ещё веселее было. Я первый текстовый редактор писал в... машинных кодах! А потом на этом самом машиннокодовом редакторе писал (уже на ассме, разумеется) другой текстовый редактор, более продвинутый А потом, на этом продвинутом написал ещё более навороченный. Получилась такая цепочка саморождения текстовых редакторов

    - - - Добавлено - - -

    Цитата Сообщение от barsik Посмотреть сообщение
    Но всё-таки для спорта разумно выбирать интересные задачи (творчество).
    Разумеется, дизассемблирование это ни разу не творчество, но обучаться программированию нужно как-то было, вот и приходилось разбираться в чужих программах. Частенько конечно просто в кодах, но когда что-то масштабное и сложное, то лучше дизассемблировать. Это сейчас есть интернет, куча информации, что аж уже и не интересно, а раньше не то что "железный занавес", а я бы сказал глухой бункер был, программы набирались в машинных кодах, а некоторые дампы приходилось аж переписывать вручную в библиотеках!

    - - - Добавлено - - -

    Цитата Сообщение от barsik Посмотреть сообщение
    интерактивная IDA ещё удобнее, т.к умнее и спасает от многих ошибок. При интерактивном дизассемблировании большой плюс в том, что распознав назначение подпрограмм или участков кода, мы сразу назначаем осмысленные имена меток, в итоге получается почти исходник. В итоге, то что примитивным дизассемблером делается за многие дни каторжного труда в IDA делается за пол часа.
    Я не хаккер, поэтому в профессиональных системах дизассемблирования не нуждаюсь. Чужой код использую исключительно в образовательных целях. Например, разбирался с ВГ93 исключительно посредством анализа кода причинных мест SPDOS.

    - - - Добавлено - - -

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Denn, понятно, что этот прием усложняет дизассемблирование. Но вряд ли автор ставил перед собой такую задачу.
    Действительно вряд ли. Скорее банальная экономия трёх байт при каждом выводе сообщения. Но красиво! Я бы вряд ли до такого сам додумался.
    Вспомнилось, как когда-то было откровением нетрадиционное использование стека, кажется впервые я это встретил в п/п скроллинга экрана. Причём выяснилось вот как, сначала я написал свой скроллинг и с удивлением обнаружил, что монитор делает это в разы быстрее! Заинтересовался, начал разбираться (тогда ещё в машинных кодах), по-началу вообще не понял как это работает! )) Потом, когда "дошло", то прифигел конкретно )) Не иначе как Боги писали такой код!
    Вообще, по молодости много было таких "открытий", славное было время.
    Сейчас полная скукота: гугл, запрос, вот тебе всё на блюдечке. Желание что-то думать (и изобретать) отбивает напрочь. Времена тупой копипасты и собирания из готовых "кубиков" (не вникая). И в тоже время все всё знают, потому что почитали в интернетиках, но никто ничего не делает, потому что никому ничего не интересно и не нужно (кроме как читать эти самые интернетики ).
    Последний раз редактировалось Denn; 29.07.2017 в 16:22.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  10. #19
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn
    Не иначе, как Боги писали такой код !
    Нет не боги. Это был А.Ф.Волков.

    А для ещё большей экономии байтов при выводе текстов в 7-ми битной кодировке удобно в качестве стоп-сигнала использовать не байт 0, а выставленный старший бит символа. Для этого достаточно чуть-чуть доработать п/п-мму F818 или написать свою п/п-мму MSSGH. Это используется во многих иностранных компьютерах, а в ассемблерах для них есть специальный оператор, который задаёт строку, как DEFB, но дополнительно устанавливает старший бит в последнем символе строки. В ассемблерах, дизассемблерах и компиляторах ЯВУ, т.е везде, где большие таблицы, это даёт экономию в килобайты.
    Последний раз редактировалось barsik; 29.07.2017 в 17:48.

  11. #20
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Нет не боги. Это был А.Ф.Волков.
    Когда ходишь пешком под стол (я тогда был школьник), то для тебя какой-то дядя (особенно которого опубликовали в журнале) и есть бог.


    Цитата Сообщение от barsik Посмотреть сообщение
    А для ещё большей экономии байтов при выводе текстов КОИ-7 удобно в качестве стоп-сигнала использовать не байт 0, а выставленный старший бит символа. Для этого достаточно чуть-чуть доработать п/п-мму F818 или написать свою п/п-мму MSSGH.
    Я тоже так думал, но на практике экономия не получается. Только если в программе "100500" коротких текстов, причём все только на одном языке.
    Подпрограмма F818h уже есть в мониторе, тобишь её код места не занимает, а MSSGH нужно писать свою, и это отнюдь не пара-тройка байт. В итоге код этой п/п больше, чем кол-во сэкономленных нуль-терминальных байтов во всех текстовых сообщениях.


    Цитата Сообщение от barsik Посмотреть сообщение
    Это используется во многих иностранных компьютерах
    Ещё бы, там сам бог велел - у них же нет русских букв
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. чья это AY композиция?
    от lokky в разделе Музыка
    Ответов: 2
    Последнее: 17.05.2009, 18:49
  2. В чем фишка ?
    от F0lken в разделе Несортированное железо
    Ответов: 9
    Последнее: 17.05.2007, 22:54
  3. [FWD] Фишка
    от Alexey Ivanov (500:95/100) в разделе Зарубежные компьютеры
    Ответов: 2
    Последнее: 04.05.2006, 19:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •