Повторяющиеся имена полей в struc

Тема в разделе "WASM.RESEARCH", создана пользователем Dmitry_Milk, 20 ноя 2007.

  1. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Приветствую

    Имею сгенерированный Идой asm-файл, туда Ида понапихала кучу struc для виндовых
    функций. В этих структурах попадаются повторяющиеся имена полей (конечно же, в разных
    структурах), типа hInstance, hwnd и т.д. При попытке обратной компиляции MASM32 8.0 обругался - мол, повторяющиеся названия. Где-то прочел, что TASM от таких недоразумений
    свободен. Hо TASM32 5.0 также обругался. Может, надо какой ключ специальный
    поставить? В доке не найду.

    Руками править названия полей, чтоб стали уникальными, как то не впечатляет,
    там только этих структур страниц на 8, а самого текста несколько мегов.
    Автоматом заменить - поди разберись, какая именно структура подразумевается в данном месте, например, если поинтер на структуру в регистре.

    Или может можно Иду заставить формировать чисто уникальные названия для полей структур? В ее опциях не нашел...
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Имена полей локальны для структур. Настройки компилятора какие?
     
  3. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Это я понимаю :)
    А вот этого как раз не знаю:

    []

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

    Использовал /ml /r
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Очень странно.
    Код (Text):
    1. ; ml.exe /nologo /c /Cp /coff
    2. .386
    3. .model flat, stdcall
    4.  
    5. t1 struct
    6.   var db ?
    7. t1 ends
    8.  
    9. t2 struct
    10.   var db ?
    11. t2 ends
    12.  
    13. end
    Что, на это тоже ругается? Если нет, тогда приведи листинг в аттаче, на который ругается. И заодно прочитай статью BrokenSword о code-ripping'e.
     
  5. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    О, хорошая статья.

    Хм, попробовал еще раз MASM 8.0
    Проблема исчезла. Наверное я в прошлый раз что-то криворуко сделал.

    Сейчас другие проблемы повылезали

    FILETIME struc ; (sizeof=0x8, standard type)
    dwLowDateTime dd ?
    dwHighDateTime dd ?
    FILETIME ends

    _WIN32_FIND_DATAA struc ; (sizeof=0x13e, standard type)
    dwFileAttributes dd ?
    ftCreationTime FILETIME ? <--- вот на это ругается, structure improperly initialized, syntax error : in structure
    ftLastAccessTime FILETIME ? <--- и аналогично на это
    ftLastWriteTime FILETIME ? <--- и на это
    nFileSizeHigh dd ?
    nFileSizeLow dd ?
    dwReserved0 dd ?
    dwReserved1 dd ?
    cFileName db 260 dup(?)
    cAlternateFileName db 14 dup(?)
    _WIN32_FIND_DATAA ends

    В чем криминал-то? Ему не нравится, что полем является другая структура, или то, что она инициализируется неопределенным значением?

    Еще префикс REPE не понимает:
    xor eax, eax
    shr ecx, 2
    mov [esp+18h+var_4], edi
    repe stosd <--instruction prefix not allowed
    mov ecx, edx
    and ecx, 3
    repe stosb <--instruction prefix not allowed
    mov eax, [esp+18h+var_4]

    Ну и похоже еще кучу других мест, где префикс не понимает, но не добрался еще, надо будет хороший текстовой редактор взять, как сказано в статье, а то листать по полчаса до нужных строк приходится.
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Dmitry_Milk
    Код (Text):
    1. ...
    2. ;; почитай синтаксис ассемблера
    3. ftCreationTime    FILETIME <>
    4. ftLastAccessTime FILETIME <>
    5. ftLastWriteTime    FILETIME <>
    6. ...
    7. ;; тут проблемы дизассемблера у префиксов REP и REPE один код 0xF3,
    8. ;; дизассемблер должен понимать что для MOVSx и STOSx актуален REP
    9. rep stosd
    10. ...
    11. rep stosb
    12. ...
     
  7. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    Команда STOS не изменяет флаг ZF, как впрочем и другие флаги, соотв-но в цикле опираться на изменение флагов она не может, и транслятор правильно ругается.
     
  8. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Ок, спасибо за подсказку, эт я руками заменю. Хотя непонятно, почему так дизассемблировалось - вроде IDA 4.1.5, не такой уж и старый.

    Точно, действительно для тсруктур надо обязательно хотябы пустые угловые скобки. Thanx!
    опять же странно, почему IDA поставил "?", или синтаксис с угловыми скобками относится только к масму?