User Tag List

Страница 20 из 31 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя
Показано с 191 по 200 из 305

Тема: DisAsm-11

  1. #191

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    DisAsm более менее работоспособен (по крайне мере на ошибки пока не налетал), так что да, чуть позже только

  2. #192

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подчистил некоторое количество хвостов - в плане ошибок, неточностей и неудобств. Не все, но, скорее всего, на этом пока остановлюсь (если ошибок опять не найду).

    Очень удобно, что стало возможным искать разное

    Поиск сделан достаточно дубово. Берётся содержимое пятого столбца окна дизасма. Что туда попадёт - можно посмотреть, сделав Ctrl/C и вставив текст куда угодно, хоть в Notepad. Далее - табуляции заменяются на пробел, выкидываются переходы на новую строку, а последовательности пробелов заменяются на один. Получившаяся строка ищется от следующей ячейки (если поиск вперёд) или предыдущей (поиск назад) и до последней/первой ячейки, с содержимом которых повторяется та же операции и результат проверяется на наличии строки поиска как подстроки. То есть - если есть метки - можно искать метку, если есть комментарии - можно искать в комментариях, но по любой части команды (только принимая во внимание, что после запятой, разделяющей операнды - идёт пробел. Ну и любые комбинации. Если очередная ячейка найдена - становится текущей, если не найдена - текущая не меняется.

    Никаких вариантов а ля * (любое количество любых символов) или ? (один любой символ). Если и буду делать - как-нибудь, если понадобится.

    А вообще странно - чего я давно не сделал поиск

  3. #193

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как уже написал в топике про ImageUtils - устал от него и (подтолкнула текущая возня с дизасмом одной проги) продолжил доработку DisAsm-11. Про добавленный поиск уже написал, но на нём не остановился.

    Когда-то достаточно давно в DisAsm-11 было добавлено определение макровызовов, которые, ко всему прочему, генерировались в зависимости от операционки для программы. Технически - всё работало, но было два Но. Одно Но было не очень так чтобы Но, скорее - но, но... Неудобно было. Это было Но - но вызвать с клавиатуры или интерфейса распознание макровызова было не возможно. Поэтому было встроен механизм - если идёт анализ кода (при загрузке или по кнопке C) - то идёт попытка и распознать макровызовы. Так что - не сильно не удобно, но.. не удобно

    Второе Но, даже НО - добавление новых макровызовов в процесс определения было КРАЙНЕ НЕДОБНО сделано. Нужно было добавить объекты-описания на уровне исходников. То есть захотел ещё один макро - редактируй исходники. Но, по ряду причин, было сделано как сделано и в принципе - неплохо работало.

    Занялся я дизасмом одной проги под RSX - а для RSX никаких описаний не было. Можно было пойти по старому, проверенному пути, но в голове начала-продолжила крутится мысль об изменения механизма и источника данных для определения макровызово. А в силу некоторых изменений внутри DisAsm-а - стало возможным изменить структуру описания шаблонов для поиска макровызовов и в результате - вынести их из DisAsm-а.

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

    Как выглядит на текущий момент.

    Загружаем в DisAsm программу

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

    Жмём Alt/M и...

    Получаем макровызов в левом окне и подстановку-определение блока макровызова в правом верхнем

    Из предыдущего механизма была взята визуализация макро-команды (но есть добавки), а подгрузка определений из файла и сопоставления содержимого ячеек памяти с шаблономи - это новое.

    Вот тут мне RSX подкинула бяку На картинке - неправильное обращение к макросу QIO$, правильно должно быть так:
    Код:
    	QIO$  2440, 15, 15, K00442, 0, <L21640, 2, 0, 0, 0, 0>
    или даже так можно
    Код:
    	QIO$  2440, 15, 15, K00442, 0, <L21640, 2>
    Но это ещё предстоит допилить

    Как выглядит описание шаблонов на текущий момент:
    Код:
    DIR$ ; source operand from instruction ; srcarg
                     012746 srcarg
      [MCallPointer] 000000:000001
                     104377
    
    QIO$ srcArg1, srcArg2, srcArg3, srcArg4, srcArg5, srcIO1, srcIO2, srcIO3, srcIO4, srcIO5, srcIO6
      [byte]     001		; dic
      [byte]     014:377		; dpb size
                 0:0     srcArg1	; function
                 0:0     srcArg2	; lun
      [byte]     0:0     srcArg3	; efn
      [byte]     0:0
      [DPointer] 0:0     srcArg4	; iost pointer
      [CPointer] 0:0     srcArg5    ; ast pointer
      [DPointer] 0:0     srcIO1
                 0:0     srcIO2
                 0:0     srcIO3
                 0:0     srcIO4
                 0:0     srcIO5
                 0:0     srcIO6
    
    QIOW$ srcArg1, srcArg2, srcArg3, srcArg4, srcArg5, srcIO1, srcIO2, srcIO3, srcIO4, srcIO5, srcIO6
      [byte]     003		; dic
      [byte]     014:377		; dpb size
                 0:0     srcArg1	; function
                 0:0     srcArg2	; lun
      [byte]     0:0     srcArg3	; efn
      [byte]     0:0
      [DPointer] 0:0     srcArg4	; iost pointer
      [CPointer] 0:0     srcArg5    ; ast pointer
      [DPointer] 0:0     srcIO1
                 0:0     srcIO2
                 0:0     srcIO3
                 0:0     srcIO4
                 0:0     srcIO5
                 0:0     srcIO6
    Из автоматических плюсов - с блоками-описаниями макровызовов предыдущий подход работать не умел, здесь появился автоматом.

    Из неавтоматических плюсов - в шаблоне можно указать тип ссылки (скажем, для DIR$ - что она ссылается на блок-описания макроса - MCallPointer) - и для ячейки автоматом выставится нужный тип, что так же может привести к цепочке последствия - скажем, в случае того же DIR$ автоматом будет попытка определения макроса в блоке-описании, что и можно наблюдать на картинках.

    Ещё изменения в работа с шаблонами - теперь можно описать несколько шаблонов - в зависимости от процессора, операционки, типа файла и т.п., а так же можно описать шаблон под дизасм конкретной программы - приведенный выше шаблон сейчас сделан как раз в таком сценарии. Причём, если исходник шаблона был изменён - при попытке обратится к Alt/M DisAsm-11 это увидет - и подгрузит новый вариант.

    Что ещё в планах

    Изменение принципа работы с шаблонами

    Для шаблонов из каталога, где лежит DisAsm11.exe - в начале дизасм-а они будут подгружаться в сеанс и дальше их изменения на текущем дизасме отражаться не будут

    Для шаблонов, связанных с дизассемблированной программы - изменения будут определяться, сгенерированные обращения для шаблонов, которые были удалены или изменены - будут аннулироваться, но после подгрузки новых - для ранее сгенерированных обращений будет повторяться поиск шаблона

    Возможно (!! пока ешё не определился) будут добавлны также шаблоны уровня каталога - то есть если в каталоге лежит несколько дизассемблируемых программ - для них можно будет создать общие шаблоны. Но пока ценность такого не понятна.

    Так же есть мысль добавить возможно переносить комментарии из шаблона в дизасм. Тут вроде всё должно быть не сильно сложно.

    Практически наверняка будут ещё аттрибуты (типа MCallPointer) уровня шаблона и уровня заголовка-описания (там, где DIR$) шаблона - но они добавляются из практической необходимости, делать по сценарию - а давайте добавим ещё такой, такой и сякой аттрибут, просто что бы было - не буду

    Так же теперь появляется возможность описывать не только макровызовы, но и определять всякие стандартные процедуры, скажем - те, которые в SYSLIB. Думаю. Механизм в целом будет похож на работы с макросыми, но есть (в визуализации) существенные отличия. Так что тут пока вообще никак

    В целом же пока работы идут в режиме тестирования - буду накидывать другие макровызовы и смотреть визуализацию, в том числе - перенесу описания из предыдущего варианта, и - искать-исправлять ошибки плюс добавление функционала, что бы старые определения работали полностью
    Последний раз редактировалось Hunta; 12.11.2024 в 15:21.

  4. #194

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Из реализованного
    Для QIOW$ - проверка алгоритма, а не реальная структура макро-вызова
    Как выглядит шаблон:
    Код:
    QIO$ srcArg1, srcArg2, srcArg3, srcArg4, srcArg5, <srcIO1, srcIO2, srcIO3, srcIO4, srcIO5, srcIO6>
      [byte]     001		; dic
      [byte]     014:377		; dpb size
                 0:0     srcArg1	; function
                 0:0     srcArg2	; lun
      [byte]     0:0     srcArg3	; efn
      [byte]     0:0
      [DPointer] 0:0     srcArg4	; iost pointer
      [CPointer] 0:0     srcArg5    ; ast pointer
      [DPointer] 0:0     srcIO1
                 0:0     srcIO2
                 0:0     srcIO3
                 0:0     srcIO4
                 0:0     srcIO5
                 0:0     srcIO6
    
    QIOW$ srcArg1, srcArg2, srcArg3, <<srcArg4>>, <srcArg5>, <<srcIO1, srcIO2>, <srcIO3, srcIO4>, srcIO5, srcIO6>
      [byte]     003		; dic
      [byte]     014:377		; dpb size
                 0:0     srcArg1	; function
                 0:0     srcArg2	; lun
      [byte]     0:0     srcArg3	; efn
      [byte]     0:0
      [DPointer] 0:0     srcArg4	; iost pointer
      [CPointer] 0:0     srcArg5    ; ast pointer
      [DPointer] 0:0     srcIO1
                 0:0     srcIO2
                 0:0     srcIO3
                 0:0     srcIO4
                 0:0     srcIO5
                 0:0     srcIO6
    Планы дальше - накидывать другие макровызовы и смотреть визуализацию, перенес описаний из предыдущего варианта, искать-исправлять ошибки плюс добавление функционала, что бы старые определения работали полностью

  5. #195

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, технически это не что-то новое, в старом варианте что-то (похожее) было, но в новом реализовано по другому.

    Как это выглядит на картинке

    И в шаблоне

    Код:
    MRKT$S srcEF, srcTM, srcTU, srcAST
             01xx46 srcEF  | 005046
             01xx46 srcTM  | 005046
             01xx46 srcTU  | 005046
             01xx46 srcAST | 005046
             012746
      [byte]     27       ; dic     
      [byte]      5       ; dpb size
             104377
    Варианты для команд из макросов я добавил в самом начале этой доработки, но вот проверка на совпадение с шаблоном и подготовка данных для визуализациии - потребовали некоторого количества кода. Сама визуализация отработала сразу

    Развлечения продолжаются...

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

    Глядя на картинку выше - так и хочется всё это дело описывать и мнемониками команд, но.. к такому подвигу пока не готов

    Возможно(!) - для стандартных процедур и кусков кода сделаю что-то промежуточное - будет браться листинг и допиливаться под шаблон с сохранением какой-то информации, но... пока не думал на эту тему
    Последний раз редактировалось Hunta; 13.11.2024 в 14:59.

  6. #196

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Приведённой выше картинки и шаблону не верить - сразу две ошибки - в шаблонке и в обрабатывающем коде
    Правильно должно быть так:
    Код:
    N14576:
    	MRKT$S  #30, R0, #2

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

  8. #197

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Набросал несколько макросов, исправил несколько ошибок

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

    В целом - я не знаю, сколько бы описывал эти три макроса при старом подходе.
    При новом (если не считать посаженные ошибки) на шаблон макроса уходит меньше минуты

  9. #198

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    19 макросов. Копирую исходник из RSXMAC.SML, дальше беру как образец уже описанный макрос и подрихтую его под новый.

    Основное время уходит на проверку результата, так как механизм ещё отлаживается и пока никаких сообщений - что не понравилось в шаблонах Или загрузит новые или нет. Или найдёт подходящий или нет

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

    В общем и целом - механизм достаточно отлажен и пока чего-то ещё кардинального добавлять вроде не требуется.

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

    Ну и продолжу добавлять новые шаблоны.
    Последний раз редактировалось Hunta; 14.11.2024 в 10:09.

  10. #199

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Немного в сторону - некоторые разборки с git - хочу всю ветку, сделанную для проверки нового подхода, перенести в master. Был бы один коммит - вообще не вопрос, а тут несколько и хочу все сохранить. Не сильно большой спец по git, поэтому займёт некоторое время

  11. #200

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,509
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оказалось, сделать просто - но из командной строки

    Продолжил развлекаться с шаблонами и дальнейшей разработкой

Страница 20 из 31 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Disasm with Sts 7.5...
    от Stl75 в разделе Софт
    Ответов: 3
    Последнее: 25.06.2018, 11:28

Ваши права

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