Приветствую Имею сгенерированный Идой asm-файл, туда Ида понапихала кучу struc для виндовых функций. В этих структурах попадаются повторяющиеся имена полей (конечно же, в разных структурах), типа hInstance, hwnd и т.д. При попытке обратной компиляции MASM32 8.0 обругался - мол, повторяющиеся названия. Где-то прочел, что TASM от таких недоразумений свободен. Hо TASM32 5.0 также обругался. Может, надо какой ключ специальный поставить? В доке не найду. Руками править названия полей, чтоб стали уникальными, как то не впечатляет, там только этих структур страниц на 8, а самого текста несколько мегов. Автоматом заменить - поди разберись, какая именно структура подразумевается в данном месте, например, если поинтер на структуру в регистре. Или может можно Иду заставить формировать чисто уникальные названия для полей структур? В ее опциях не нашел...
Это я понимаю А вот этого как раз не знаю: [] Вот среди этого не вижу, что надо поставить для того, чтоб он не ругался на одинаковые имена полей в разных структурах. Использовал /ml /r
Очень странно. Код (Text): ; ml.exe /nologo /c /Cp /coff .386 .model flat, stdcall t1 struct var db ? t1 ends t2 struct var db ? t2 ends end Что, на это тоже ругается? Если нет, тогда приведи листинг в аттаче, на который ругается. И заодно прочитай статью BrokenSword о code-ripping'e.
О, хорошая статья. Хм, попробовал еще раз 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] Ну и похоже еще кучу других мест, где префикс не понимает, но не добрался еще, надо будет хороший текстовой редактор взять, как сказано в статье, а то листать по полчаса до нужных строк приходится.
Dmitry_Milk Код (Text): ... ;; почитай синтаксис ассемблера ftCreationTime FILETIME <> ftLastAccessTime FILETIME <> ftLastWriteTime FILETIME <> ... ;; тут проблемы дизассемблера у префиксов REP и REPE один код 0xF3, ;; дизассемблер должен понимать что для MOVSx и STOSx актуален REP rep stosd ... rep stosb ...
Команда STOS не изменяет флаг ZF, как впрочем и другие флаги, соотв-но в цикле опираться на изменение флагов она не может, и транслятор правильно ругается.
Ок, спасибо за подсказку, эт я руками заменю. Хотя непонятно, почему так дизассемблировалось - вроде IDA 4.1.5, не такой уж и старый. Точно, действительно для тсруктур надо обязательно хотябы пустые угловые скобки. Thanx! опять же странно, почему IDA поставил "?", или синтаксис с угловыми скобками относится только к масму?