MTDBG - отладчик пользовательского уровня

...
  • Добавил поддержку информации об именах в программе. Такой файл может быть сгенерирован fasm'ом автоматически (версия на svn) или создан вручную: набор строк вида "0x<адрес> <имя>" (все строки, не начинающиеся с 0x, игнорируются). Можно загрузить явно командой "load-symbols <имя-файла>" или неявно, обозвав его так же, как и бинарник, но с расширением dbg.
    Ссылка та же.
  • diamond
    Последнее время пользуюсь достаточно часто отладчиком. Не мог бы ты сделать следующее:
    1) Клавишами курсора перемещаться по дебаг-листингу программы
    2) при вводе в строке ввода сделать поддержку tab т.е. как на Cisco оборудовании, вводишь начало слова, нажимаешь таб, а дальше система подставляет оставшуюся команду. Сделать память на посление команды, вводимые в строке ввода, при фокусировке на строке ввода, клавишами вверх-вниз проматывать историю команд.
    Могу порекомендовать использовать Editbox, все выше перечисленное достаточно просто реализуется.
    3) Хотелось бы просматривать дамп в отдельном окне и иметь возможность навигации по DATA.
    У меня не всегда получалось снять breakpoint. :(
  • Будет время - что-нибудь сделаю. Кстати, имей в виду, что в общем случае для x86 перемещаться по дизассемблированному листингу назад невозможно (нельзя однозначно сказать, какая инструкция была предыдущей).
    Насчёт дампа в отдельном окне не понял.
  • Я имел ввиду перемещение по листингу - просмотр кода, мне порой удобнее проматать вниз или вверх клавишами, чем использовать инструкцию u <адресс>. У тебя есть команда d <адресс> - показать содержимое памяти. у тебя показывается порой очень мало данных в этом окне. Если возможно сделай возможность просмотра данных в отдельном окне, с навигацией по массиву кода. (Перемещение клавишами курсора, и просмотр содержимого что - то на подобии hiew
  • diamond об этом и говорит. Определить какая инструкция была последней (длиной 1, 2, 3 или больше байт) затруднительно. В зависимости от того с какого адреса ты начнешь дизасемблировать код у тебя будет менять набор инструкций.
    Хотя это полезная фича, она конечно нужна.

    ..bw
  • за поддержку информации о именах в программе огромное спасибо! отлаживать стало намного приятнее! =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Классный отладчик. Завидую...
  • Во-первых, заметил один баг: при определённых обстоятельствах MTDBG не показывает данные по имени адреса (при этом в листинге отражается именно он, а на команду d пишет Parse error) (см. вложение). Если надо, могу выложить файлы (исполняемый и dbg) на которых это заметил.
    Во-вторых, есть ещё один мелкий баг: при перерисовке рисуется не всё окно (тоже видно во вложении).
    Attachments
    Скриншот
    bug2.png (40.85 KiB)
    Скриншот Viewed 8570 times
  • Посмотрел на код работы с таблицей символов, один баг исправил, больше не вижу. Если svn.1265 (она же версия, включённая в последнюю ночную сборку) всё равно работает с символами неправильно, файл .dbg в студию (исполняемый необязательно).
    Ушёл к умным, знающим и культурным людям.
  • Нужен ли MTDBG компонент edit_box, и подключаемая библиотека box_lib.obj?
  • <Lrz>
    В данный момент - нет.
    Ушёл к умным, знающим и культурным людям.
  • diamond
    Вроде бы работает. Кстати, то, что отладчик при некоторых вылетах программы тоже вылетает, это неизбежно? Или это баг? Если надо, могу уточнить подробности.
  • Отрисовку поправил, svn.1269 (включена в последнюю ночную сборку).
    Вроде у меня тоже вылетал, когда из-за глюков со стеком отлаживаемая программа прыгнула на FFFFFFFF. Вроде системная функция read_process_memory от таких запросов грохается вместе с вызывающим процессом.
    Ушёл к умным, знающим и культурным людям.
  • Некоторое время назад разбирался с отладчиком и сделал раскрашенный вариант документации.
    mtdbg_pdf_odt.7z (145.9 KiB)
    Downloaded 258 times
    В архиве ODT и PDF файлы.

    Также, если кому интересно - список меток с адресами можно получить использовав утилиты идущие в комплекте с FASM.

    Например для линуксовой версии это выглядит приблизительно так:

    Code: Select all

    #!/bin/bash
    #
    	echo "lang fix ru"
    	echo "lang fix ru" > lang.inc
    	fasm -m 16384 animage.asm animage -s animage.fas
    	listing -b 4 animage.fas animage.dbg
    	symbols animage.fas animage.sbl
    	rm -f lang.inc
    	exit 0
    
    Однако даже самый очищенный файл, полученный из утилиты symbols, содержит мусор. И к тому же порядок следования названий меток и адресов наоборот от требуемого для отладчика.

    У меня есть планы прикрутить OpenDialog к отладчику для выбора отлаживаемого файла. Существующий синтаксис при этом не поменяется. Добавится только одна опция указывающая брать путь из области полученной от OpenDialog. По пути возможно доработаю утилиту symbols до необходимого отладчику формата *.dbg
  • Who is online

    Users browsing this forum: No registered users and 6 guests