OLLY и FASM debug info

Тема в разделе "WASM.ASSEMBLER", создана пользователем Z3N, 5 май 2010.

  1. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Вот, решил после переписки с baldr сделать сие чудо. Не всё же мне время с клерком прерикаться %).

    Плагин добавляет метки из фас-файла, для нужд отладки. Если фас файл имеет вид exename.fas, то его подхват происходит автоматически, а если нет, то предлагается указать его. К сожалению, фас файлы не содержат комментариев :dntknw:. А зря, видеть свои комменты было бы очень полезно.

    Замечена лажа с локальными переменными. Они имели довольно странный вид. Раньше такое было и с константами. Но я поставил проверку на то, чтобы адрес метки не был меньше базы экзешника. Симптомы пропали, но вот локальные переменные с отрицательным смещением получают довольно странные имена. Ввёл проверку на отрицательные смещения - теперь заработало нормально. Но мне не нравиться это решение, видимо я что-то не так посчитал.

    Дольно забавно выглядят метки от .if и иже с ним, возможно, томасу стоило давать им осмысленные имена.

    Возможно (по крайнер мере не должно :)) не будет работать с длл. А также с ексе с релокациями. Можно довольно легко сделать, но мне некогда, работает - ну, и ладно....

    Раньше чем через месяца три я его дорабатывать не буду. Так, что, если кто-то хочет её доработать, то пожалуйста.
    Если кто хорошо знает олю (надо сделать так, чтобы файл грузился сразу) или хорошо разбирается в fas, то просьба довести плаг до ума.
    В папке с исходниками лежат:
    Описание fas формата.
    Объектник к оле.
    Plugin.h к оле.
    Шаблон к 010, для облегчения ковыряния в файле (шаблон примитивный, просто показывает хидер, а также все записи символов).

    P.S.
    Просьба не пинать за стиль, просто давно не писал на си. Довольно много времени просто ушло на то, чтобы вспомнить как найти место где последний раз встречается символ, например.
     
  2. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Исходники
     
  3. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Z3N, неплохо, спасибо)
     
  4. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Небольшое исправление. Раньше плуг мог не всегда прочитать файл изза флага NO_BUFFERING.
    Странно, что если округлить значение в большую сторону ( я беру самый большой размер кластера, мне известный), то всё читается нормально. Почему бы не сделать такое округление в самой апи?

    Мне эта ошибка встретилась уже на третьем файле. Странно, что никто мне о ней не написал. Пользуется, видимо ровно 2.5 человека :)

    Бинарники.
     
  5. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Кстати, а как можно округлить число на нужное значение в большую сторону?


    Исходники
     
  6. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    --бред--
    :)
     
  7. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Можете пример задачи дать?
    Все дело в Олли - старая меня не устраивает.
     
  8. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Вот вам минус редактирования :)


    А меня новая, она не поддерживает символы и плагины, которых у меня достаточно :)

    Если использовать флаг NO_BUFFERING, то надо, чтобы число байт, которые мы читаем через ReadFile должно делиться на размер сектора на данном диске.

    Число_байт%размер_сектора==0
    % - это модуль.
     
  9. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    \ZFasConvRebrand.rar\ZFasConv\ZFasConv\readme.txt:
    "Сделать проверку на отрицательные значения, чтобы не портить лок. переменные."

    Можете пример задачи дать?
     
  10. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Чего то я слабо понимаю, о чём разговор :).

    Обе задачи я уже решил, просто думал, что кто-нибудь может лучше.

    P.S.
    Локальные переменные уже давно не портятся! Они просто не показываются :).
     
  11. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Код (Text):
    1. left_bytes    dd 514 ;надо считать
    2. sector_size   dd 512 ;байт на сектор
    3. partial_bytes dd ?   ;left_bytes % sector_size
    4.  
    5. entry $
    6.  
    7.         mov      eax,[left_bytes]
    8.         div      [sector_size]
    9.         sub      [left_bytes],edx
    10.         mov      [partial_bytes],edx
    11.         ...FILE_FLAG_NO_BUFFERING(left_bytes)
    12.         ...(partial_bytes)
    13.         ret
     
  12. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    edemko не взрывай людям мозг таким кодом :)
    Ты б ещё через интеграл посчитал.
    Размер сектора - степень двойки.
    А округление в большую сторону до степени двойки это:
    Код (Text):
    1. val = (val+(alignment-1)) & ~(alignment-1);
    В частности вот этот мега код:
    Код (Text):
    1. filesize=filesize-(filesize%4096)+4096;// biggest sector size what i know
    По нормальному записывается так:
    Код (Text):
    1. filesize=(filesize+0xFFF) & ~0xFFF;
    К тому же твой код вообще неправильный - проверь к примеру на filesize=4096
     
  13. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    тогда left_bytes станет 0, а partial_bytes примет значение left_bytes :)

    filesize=(filesize+0xFFF) & ~0xFFF; <- вы хотите сделать выравнивание, значит "+0xFFF" лишнее из-за "& ~0xFFF" :)

    val = (val+(alignment-1)) & ~(alignment-1);
    Код (Text):
    1. mov      eax,val
    2. mov      ebx,eax
    3. and      eax,val-1
    4. sub      ebx,eax
    5. ...no_beffering(ebx)
    6. ...(eax :)
    :) ^) &): :): :? ^() <(:)
     
  14. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да что ты говоришь.
    Выровнять надо вверх если кто не заметил.
    edemko - твой код вычитает остаток от деления - округляет вниз, а просили вверх.
    А насчёт filesize=4096 я писал про оригинальный код автора.
    Или сейчас модно отвечать даже исходники не глянув?
     
  15. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    cppasm
    В код глядел но не вникал никак.
    Так округлять вверх не умею/не умел.
    В последнем кодесе от меня не val-1, а сектор_размер -1.

    ...сходил в магазин за крышками...подумал...filesize=(filesize+0xFFF) & ~0xFFF; лучше
    Чесно, я думал о копировании памяти, потому сразу откинул ваш семпл.
     
  16. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Спасибо, я понимал, что делаю :). Ну, если размер будет 4096, то мой код просто добавит ещё 4096.
    Что хорошего можно накодить в три часа ночи на скорую руку :). Главное чтобы работало.

    А округление через and корректно работает для больших чисел? У меня какие-то смутные воспоминания о этом.
     
  17. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Согласно ф-лы <cppasm>, все зависит от размера сектора и размера куска считывания: возможно переполнение, но это не в наше время.
     
  18. ts

    ts New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2010
    Сообщения:
    11
    последняя версия плагина не загр. на олли 1.10 + Вин7. На ХП все нормально.
     
  19. maybeZ3N

    maybeZ3N New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2010
    Сообщения:
    80
    К сожелению у меня нет семёрки, поэтому отдебажить не могу. В последней версии, вроде бы, ничего не меня, кроме округления размера файла. Могу предположить, что есть какие-то новые заморочки с NO_BUFFERING в семерке. Когда буду дома - пересоберу с буферизацией. Хотя, вы лучше собирете для себя сами. Потому, как дома я буду не скоро.

    P.S. Семёрка у меня даже не становиться - пишет "плохой диск, иди, плати денежки, меняй, двигай нашу говёную индустрию", дура, что она может понимать в дисках? :)