Дизассемблер длин инструкций

Тема в разделе "WASM.BEGINNERS", создана пользователем 2FED, 10 авг 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Скачал исходник
    Возникла проблемма, там есть одна строчка не как не пойму что она означает, скорее всего этот исходник не для масм.

    Код (Text):
    1. mov     al, byte ptr ebp.[c_Table+eax]
    заменил на

    Код (Text):
    1. mov     al, byte ptr [c_Table+eax]
    работает но вместо длины инструкции всегда 2 возвращает.

    В общем подскажите как его "оживить" или дайте линки на чтонибудь рабочее.
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Фуух! заработало, всё дело было в кривом описании, из файлика readme.txt

    Похоже что описалово писал совсем не автор, и вместо регистра edi нужно юзать esi, так как команда lodsb загружает значение из esi. В это я уже въехал начания просматривать исходник пытаясь разобратся почему он не работает. Ну а та непонятная строка досих пор осталась для меня загадкой.

    ps Не плохо было бы "исправить" описалово в архиве на сервере.
     
  3. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    ты тупо выкинул регистр ebp, который частенько, к примеру, используется для адресации локальных переменных, размещенных в стеке. Во втором случае ссылка наверняка идет на сегмент данных. А вобще, трудно делать какие то выводы, на зная типа c_Table, модели памяти, и т.д.


    а, уже отпало.... и ссылку на исходник не заметил.... проехали....
     
  4. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    2FED
    может так нужно:

    Код (Text):
    1. mov al, byte ptr [ebp+c_Table+eax]
    ...
    Ну и я фигню написал :)
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    смотрел в SoftICE регистр ebp всегда получается равным нулю

    там идёт
    call c_Delta
    c_Delta:
    pop ebp
    sub ebp, offset c_Delta

    тоесть в ebp получается смещение c_Delta, а потом оно же от него и отнимается в результате всёравно получается 0.


    а насщёт того чтобы записать mov al, byte ptr ebp.[c_Table+eax]

    так mov al, byte ptr [ebp+c_Table+eax]

    тоже работает, но я не вижу смысла в этом. И вообще что это за синтаксис, tasm?
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    2FED
    Код рассчитывался быть базонезависимым. Если он будет загружен по базе, на которую рассчитывал компилятор, то в ebp, разумеется, будет нуль.
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    ok понятно, теперь вопрос за мылым.

    mov al, byte ptr [ebp+c_Table+eax] ; Так правильно ?
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    2FED
    Да.