Пакет MASM64

Тема в разделе "WASM.X64", создана пользователем Mikl___, 26 ноя 2025.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    Сначала MASM был коммерческим продуктом, но затем Microsoft стал распространять MASM в составе бесплатного DDK (Device Driver Kit — пакет разработчика драйверов), а также в составе Visual C++. Хотя Microsoft официально не объявлял MASM бесплатным продуктом, но фактически этот ассемблер можно получить и использовать бесплатно.
    В состав пакета ассемблера фирмы Microsoft входят следующие программы:


    Программа ml64.exe
    Транслирует и связывает один или более исходных ассемблерных файлов.
    Командная строка имеет вид
    ML64 [ключи] исходный_файл1.asm [[ключи] исходный_файл2.asm] ... [/link ключи компоновщика]

    Ключи командной строки чувствительны к регистру
    Переменные окружения (environment variables) ML64
    можно задать некоторые характеристики для выходного объектного и затем исполняемого файла.
    Наборы переменных с именами и значениями, которые используют ОС и другие программы.
    Настроить список переменных двух наборов (пользователя и системных) в Windows можно так:
    правый клик на «Мой компьютер» «Свойства» закладка «Дополнительно» «Переменные среды».
    Для установки переменной в одном сеансе запуска консоли можно воспользоваться командой SET из командной строки.
    • INCLUDE Указывает путь поиска для включения файлов.
    • ML Задает параметры командной строки по умолчанию.
    • TMP Указывает путь для временных файлов.
    Ключи свойств будущей программы
    КлючДействиеОсобенности
    /F шестнадцатеричное значение Устанавливает размер стека в шестнадцатеричное значение байт (аналогичен ключу link /STACK:шестнадцатеричное значение), где шестнадцатеричное значение - значение в шестнадцатеричной системе счисления. /F и шестнадцатеричное значение должны разделяться пробелами. Размер указывается после пробела в байтах в шестнадцатеричном виде. Для Win-программ это число лучше сделать кратным 1000h. По умолчанию для стека резервируется 4kb (1000h). Но Windows динамически определяет необходимый объём стека 64-разрядных приложений. Для оптимизации имеет смысл задать размер стека, который всё равно будет использоваться программой. Тогда отпадает необходимость часто увеличивать стек динамическим путёмПрактически не применяется. То же, что опция /STACK компоновщика link.exe. Обычно используется значение по умолчанию = 1 Мбайт
    /Zp[выравнивание] Выравнивание структур на указанной границе байта. Выравнивание может быть 1, 2, 4, 8 или 16Может быть использован для установки принятого в windows выравнивания по умолчанию - на 8 байт. Однако обычно в применении нет необходимости, так как в windows используется два варианта выравнивания структур - на 4 и на 8 байт, и определять их выравнивание целесообразно непосредственно в описании структуры директивой STRUCT. Возможные значения для этой опции 1, 2, 4, 8 и 16
    Ключи модификации исходного текста
    КлючДействиеОсобенности
    /Cp Сохраняет регистр всех идентификаторов пользователейПрименение не обязательно, но возможно для дополнительного контроля синтаксиса. Вызывает ошибку "A2006: undefined symbol" при несовпадении регистра в объявлении идентификатора и обращении к нему. Позволяет избежать ошибок на этапе компоновки в случае, если идентификатор объявлен с неверным регистром.
    /CxСохранить регистр символов, объявленных в директивах publics и externsНе применяется, так как компоновка Windows приложений чувствительна к регистру
    /Dидентификатор[=значение] Определить текстовую макрокоманду с данным именем. Если значение отсутствует, тогда идентификатор в тексте заменяется пробелом. Если значение содержит строку с пробелами, тогда строка заключается в кавычки. При помощи этого ключа можно добавлять к исходнику текстовые макросы в командной строкеПрименяется по усмотрению программиста. Аналог директив EQU или =. Если текст содержит пробелы, его следует взять в кавычки. Обычно используется в отладочном версии приложения для объявления имени DEBUG.
    Работа с именами файлов и путями
    КлючДействиеОсобенности
    /Feимя файла Задать имя исполняемого файла (exe, dll, sys)Не применяется, так как с учетом опции /c компилятор не создает исполняемого файла
    /Foимя файла Имя объектного файла (obj)Обычно не применяется. Позволяет задать obj-файлу имя, отличное от имени asm-файла.
    /I путьУстановить путь для включаемых файлов. Позволяет задать максимум 10 ключей /I
    /XИгнорировать путь заданный переменной INCLUDEОбычно не применяется
    /Taимя файлаСобирает исходный файл, имя которого не заканчивается расширением .asmОбычно не применяется. Служит для компиляции файлов, имя которых имеет расширение, отличное от asm
    Листинг
    КлючДействиеОсобенности
    /EP Генерация препроцессорной распечатки программы (посылается в stdout). Смотри /SfОбычно применять нет необходимости. Листинг препроцессора представляет собой исходный текст вместе с включаемыми файлами.
    /Fl[имя файла] Генерировать листинг. Смотри /SfОбычно не применяется, так как средства MS Visual Studio, как правило, достаточны для работы с текстом приложения
    Настройки листинга трансляции
    КлючДействиеОсобенности
    /SaВключить в листинг всю доступную информациюПрименяется редко, так как собственных средств MS Visual Studio обычно достаточно для работы с исходным и компилированным текстом программы, и в выдаче листинга нет необходимости.
    /SfВключить листинг первого прохода в общий листинг
    /Sl ширинаУстанавливает ширину строки листинга в символах. Диапазон ― от 60 до 255 или 0. Значение по умолчанию ― 0. Действия ключа аналогично директиве PAGE число
    /Sn Не включать таблицу символов в листинг
    /Sp длина Установить длину страницы листинга в строках на страницу. Диапазон значения длина ― от 10 до 255 или 0. Значение по умолчанию ― 0
    /Ss строка Определяет строку подзаголовка для листинга. Действие ключа аналогично директиве SUBTITLE строка
    /St текстОпределяет текст заголовка для листинга. Действие ключа аналогично директиве TITLE текст
    /SxВключить в листинг все фрагменты условной компиляции
    Сопроводительные файлы
    КлючДействиеОсобенности
    /Fm[имя файла]Создать файл карты компоновщика (map)Не применяется, так как map-файл создается компоновщиком, а с учетом опции /c компилятор не вызывает компоновщик
    /Fr[имя файла] Генерировать файл .SBR браузера базы данных проекта PWBПрименение менее предпочтительно, чем /FR, так как в информацию броузера не включается сведения о локальных идентификаторах.
    /FR[имя файла] Генерировать расширенный файл .SBR браузера базы данных проекта PWBПозволяет получать быстрый доступ к любому идентификатору во всем пространстве проекта и заголовочных файлов API
    Ошибки и предупреждения
    КлючДействиеОсобенности
    /wТо же самое, что и /W0 /WX
    /WXВозвратить код ошибки, если сгенерированы предупрежденияОбычно в применении нет необходимости. В случае возникновения предупреждений компиляция завершается неуспешно.
    /WуровеньУстановить уровень сообщений (уровень = 0, 1, 2, 3)Обычно в применении нет необходимости. Устанавливает перечень событий компиляции, трактуемых как предупреждения
    Отладочная информация
    КлючДействиеОсобенности
    /ZfСделать все идентификаторы общимиОбычно не применяется.
    /ZiВключение в объектный файл информации для отладчикаОбязательно применяется на этапе отладки. Формат отладочной информации MASM полностью совместим с используемым встроенным отладчиком MS Visual Studio
    /ZdВключение в объектный файл информации о номерах строк для отладчикаОбычно не применяется, так как на этапе отладки более целесообразно использовать опцию /Zi
    Свойства линковщика
    КлючДействиеОсобенности
    /Bl имя компоновщикаВыбрать другой компоновщик (не link.exe)Обычно не применяется, так как возможностей link.exe вполне достаточно. Используется опция /c
    /c Только трансляция исходного файла. Не компоноватьчтобы выполнять компоновку отдельным этапом.
    /link Опции командной строки компоновщика и подключаемые библиотекиНе применяется, так как компоновка отключена опцией /c
    Прочие ключи ML64
    КлючДействиеОсобенности
    /nologoМинимальный объем сообщений о ходе трансляциибаннерный текст смысловой нагрузки не несет.
    /Zsвыполнить только проверку синтаксисаОбычно не применяется. Подавляет формирование объектного модуля
    /ZH:MD5Использовать MD5 для контрольной суммы в сведениях отладки
    /ZH:SHA_256Использовать SHA256 для контрольной суммы в сведениях отладки (по умолчанию в Visual Studio 2022 версии 17.0 и более поздних версиях).
    /Gy[-]отдельные функции для linker
    /errorReport:<option>Устарело. Отчеты об ошибках управляются параметрами отчеты об ошибках Windows (WER)
    /quietПодавляет сообщение "Сборка". Доступно в Visual Studio 17.6 и более поздних версиях.
    /?Справка о синтаксисе командной строки ML64
    /helpВыводит список ключей с кратким пояснением
    Ссылки:
     
    Последнее редактирование: 6 дек 2025
    GRAFik нравится это.
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    Программа link.exe
    Компоновщик link компонует (объединяет) объектные файлы и библиотеки в исполняемый файл или динамически компонуемую библиотеку (DLL). При запуске компоновщика за пределами Visual Studio можно указать входные данные одним или несколькими способами:
    • В командной строке
    • Использование файлов команд
    • В переменных среды
    Компоновщик сначала обрабатывает параметры, указанные в LINK переменной среды, а затем параметры в порядке, указанном в командной строке и в файлах команд. Если параметр повторяется с разными аргументами, последний обработанный имеет приоритет.
    Параметры применяются ко всей сборке; Никакие параметры не могут применяться к определенным входным файлам.
    Чтобы выполнить команду link.exe, используйте следующий синтаксис команды:
    link arguments

    Параметры arguments включения и имена файлов можно указать в любом порядке. Сначала обрабатываются параметры, а затем файлы. Используйте одно или несколько пробелов или вкладок для разделения аргументов.
    Аргументы link.exe командной строки можно передать в форму файла команды. Чтобы указать файл команды компоновщику, используйте следующий синтаксис:
    link @commandfile

    Имя commandfile текстового файла. Пробел или вкладка не разрешены между знаком (@) и именем файла. Нет расширения по умолчанию; Необходимо указать полное имя файла, включая любое расширение. Подстановочные знаки нельзя использовать. Можно указать абсолютный или относительный путь с именем файла. Не должно превышать MAX_PATH (260 символов). Компоновщик не использует переменную среды для поиска файла.
    В файле команд аргументы разделены пробелами или вкладками (как в командной строке) и новыми символами.
    В командном файле можно указать все или часть командной строки. В команде link.exe можно использовать несколько файлов команд. Компоновщик принимает входные данные в командной строке, как если бы он был указан в этом расположении в командной строке. Не удается вложить файлы команд. Компоновщик отражает содержимое файлов команд, если /NOLOGO не указано.
    Переменные среды link.exe
    Компоновщик распознает следующие переменные среды:
    • LINK и _LINK_, если определено. Компоновщик добавляет параметры и аргументы, определенные в переменной среды, и добавляет параметры и аргументы, определенные в LINK переменной _LINK_ среды, к аргументам командной строки перед обработкой.
    • LIB, если определено. Компоновщик использует LIB путь при поиске объекта, библиотеки или другого файла, указанного в командной строке или параметре /BASE . Он также использует LIB путь для поиска .pdb файла с именем в объекте. Переменная LIB может содержать одну или несколько спецификаций пути, разделенных точкой с запятой. Один путь должен указывать на \lib подкаталог установки Microsoft C++.
    • PATH, если инструменту нужно запустить CVTRES и не удается найти файл в том же каталоге, что link.exe и сам. (link.exe требуется CVTRES связать .res файл.) PATH должен указывать на \bin подкаталог установки Microsoft C++.
    • TMP, чтобы указать каталог при связывании OMF или .res файлов.
    Командная строка link.exe имеет вид
    LINK [ключи] объектные_файлы.obj [@commandfile]

    Значения ключей:
    КлючиДействие
    @Указывает файл с ключами
    /ALIGN:#Задает выравнивание каждой секции.
    /ALLOWBIND[:NO]Указывает, что библиотека DLL не может быть привязана.
    /ALLOWISOLATION[:NO]Задает поведение нахождения файлов манифеста.
    /APPCONTAINERОпределяет, должно ли приложение выполняться в среде процесса контейнера приложений.
    /ARM64XFUNCTIONPADMINX64Указывает минимальное количество байтов заполнения между функциями x64 в образах ARM64X.17.8
    /ASSEMBLYDEBUG[:DISABLE]Добавляет атрибут DebuggableAttribute в управляемый образ.
    /ASSEMBLYLINKRESOURCE:имя файлаСоздает ссылку на управляемый ресурс.
    /ASSEMBLYMODULE:имя файла[,[ name][, PRIVATE]]Указывает на то, что в сборку должен быть импортирован модуль MSIL.
    /ASSEMBLYRESOURCE:имя файлаВнедряет файл управляемых ресурсов в сборку.
    /BASE:{address[, size]| @имя файла, key}Задает базовый адрес для программы.
    /CETCOMPATПомечает двоичный файл как совместимый с теневым стеком CET.
    /CGTHREADSЗадает число потоков cl.exe, используемых для оптимизации и создания кода, если задано создание кода во время компоновки.
    /CLRIMAGETYPE:{IJW| PURE| SAFE}Задает тип (IJW, pure или safe) CLR-образа.
    /CLRLOADEROPTIMIZATION:{SD| MD| MDH| NONE}
    /CLRSUPPORTLASTERROR[:{NO| SYSTEMDLL}]Сохраняет последний код ошибки функций, вызываемых с помощью механизма P/Invoke.
    /CLRTHREADATTRIBUTE:{STA| MTA| NONE}Указывает атрибут потока для применения к точке входа CLR-программы.
    /CLRUNMANAGEDCODECHECK[:NO]Указывает, применяет SuppressUnmanagedCodeSecurity ли компоновщик атрибут к заглушкам, созданным компоновщиком P/Invoke, вызывающим из управляемого кода в собственные библиотеки DLL.
    /DEBUG:имя файлаСоздает отладочную информацию.
    /DEBUGTYPEУказывает, какие данные необходимо включить в отладочную информацию.
    /DEFПередает компоновщику файл определения модуля (DEF).
    /DEFAULTLIB:libraryПроводит поиск по указанной библиотеке при разрешении внешних ссылок.
    /DELAY:{NOBIND|UNLOAD}Управляет отложенной загрузкой библиотек DLL.
    /DELAYLOAD:dllВключает отложенную загрузку указанной библиотеки DLL.
    /DELAYSIGN[:NO]Частично подписывает сборку.
    /DEPENDENTLOADFLAGЗадает флаги по умолчанию для зависимых загрузок DLL.
    /DLLВыполняет сборку библиотеки DLL.
    /DRIVER[:{UPONLY| WDM}]Создает драйвер режима ядра.
    /DYNAMICBASE[:NO]Указывает, следует ли создавать исполняемый образ, который перебазирован во время загрузки с помощью функции случайности макета адресного пространства (ASLR).
    /DYNAMICDEOPTВключите динамической отладки C++ (предварительная версия) и шаг в любом месте с функцией по запросу deoptimization.
    /ENTRY:symbolЗадает начальный адрес.
    /ERRORREPORT:{NONE| PROMPT| QUEUE| SEND}Устарело. Отчеты об ошибках управляются параметрами отчеты об ошибках Windows (WER).
    /EXPORT:symbolЭкспортирует функцию.
    /FILEALIGNВыравнивание разделов в выходном файле по нескольким значениям.
    /FIXED[:NO]Создает программу, которая может загружаться только по предпочтительному базовому адресу.
    /FORCE[:{MULTIPLE| UNRESOLVED}]Принудительное завершение компоновки даже в случае наличия неразрешенных или многократно определенных символов.
    /FUNCTIONPADMIN[:size]Создает образ, для которого можно выполнять горячее обновление.
    /GENPROFILE, /FASTGENPROFILEОба этих параметра указывают создание .pgd файла компоновщиком для поддержки оптимизации по профилю (PGO). /GENPROFILE и /FASTGENPROFILE используют разные параметры по умолчанию.
    /GUARDВключает защиту потока управления.
    /HEAP:reserve[, commit]Задает размер кучи в байтах.
    /HIGHENTROPYVAОпределяет поддержку 64-разрядной функции Address Space Layout Randomization (ASLR) с высоким уровнем энтропии.
    /IDLOUT:имя файлаУказывает имя файла и других выходных .idl файлов MIDL.
    /IGNOREОтменяет вывод указанных предупреждений компоновщика.
    /IGNOREIDLЗапрещает обработку сведений о атрибутах в .idl файл.
    /ILKПереопределяет имя файла базы данных по умолчанию.
    /IMPLIB:имя файлаПереопределяет имя библиотеки импорта по умолчанию.
    /INCLUDE:symbolПринудительное использование ссылок на символы.
    /INCREMENTAL[:NO]Управляет инкрементной компоновкой.
    /INFERASANLIBSИспользует выведенные библиотеки санитизатора.
    /INTEGRITYCHECKУказывает на то, что модуль требует проверки подписи во время загрузки.
    /KERNELСоздание бинарного файла режима ядра.
    /KEYCONTAINER:nameЗадает контейнер ключей для подписи сборки.
    /KEYFILE:имя файлаЗадает ключ или пару ключей для подписи сборки.
    /LARGEADDRESSAWARE[:NO]Сообщает компилятору, что приложение поддерживает адреса размером более 2 гигабайт
    /LIBPATH:dirУказывает путь для поиска перед путем среды библиотеки.
    /LINKREPROУказывает путь для создания артефактов повторной подготовки ссылок.
    /LINKREPROFULLPATHRSPСоздает файл ответа, содержащий абсолютные пути ко всем файлам, которые компоновщик взял в качестве входных данных.
    /LINKREPROTARGETСоздает повторную версию ссылки только при создании указанного целевого объекта.16.1
    /LTCG[:{NOSTATUS| PGINSTRUMENT| PGOPTIMIZE| PGUPDATE| STATUS}]Задает создание кода во время компоновки.
    /MACHINE:{ARM| EBC| IA64| MIPS| MIPS16| MIPSFPU| MIPSFPU16| SH4| THUMB| X64| X86}Указывает целевую платформу.
    /MANIFEST[:NO]Создает параллельный файл манифеста и при необходимости включает его в двоичный файл.
    /MANIFESTDEPENDENCY:manifest dependencyУказывает раздел зависимойAssembly <> в файле манифеста.
    /MANIFESTFILE:имя файлаИзменяет имя файла манифеста по умолчанию.
    /MANIFESTINPUTЗадает входной файл манифеста для обработки и внедрения компоновщиком в двоичный файл. Этот параметр можно использовать несколько раз, чтобы указать несколько входных файлов манифеста.
    /MANIFESTUAC[:{NO| UAC fragment}]Указывает, следует ли внедрять в манифест программы сведения о контроле учетных записей.
    /MAP[:имя файла]Создает файл сопоставления.
    /MAPINFO:{EXPORTS}Включает указанные сведения в файл сопоставления.
    /MERGE:from=toОбъединяет разделы.
    /MIDL:@commandfileЗадает параметры командной строки MIDL.
    /NATVISДобавляет визуализаторы отладчика из файла Natvis в базу данных программы (PDB).
    /NOASSEMBLYПодавляет создание сборки .NET Framework.
    /NODEFAULTLIB[:library]Пропускает все (или только указанные) библиотеки по умолчанию при разрешении внешних ссылок.
    /NOENTRYСоздает библиотеку DLL, содержащую только ресурсы.
    /NOFUNCTIONPADSECTIONОтключает заполнение функции для функций в указанном разделе.17.8
    /NOLOGOОтключает загрузочный баннер.
    /NXCOMPAT[:NO]Помечает исполняемый файл как файл, проверенный на совместимость с компонентом предотвращения выполнения данных Windows.
    /OPT:{ICF[=iterations]| NOICF| NOREF| REF}Управляет оптимизацией LINK.
    /ORDER:@имя файлаПомещает секции COMDAT в образ в предопределенном порядке.
    /OUT:имя файлаЗадает имя выходного файла.
    /PDB:имя файлаСоздает PDB-файл.
    /PDBALTPATHИспользует альтернативное местоположение для сохранения файла PDB.
    /PDBSTRIPPED:имя файлаСоздает PDB-файл, не имеющий закрытых символов.
    /PGD:имя файлаЗадает .pgd файл для оптимизации с помощью профиля.
    /POGOSAFEMODEУстаревшая сборка создает инструментированную сборку PGO с безопасным потоком.
    /PROFILEСоздает выходной файл, который может быть использован для профилировщика производительности инструментов.
    /RELEASEЗадает контрольную сумму в заголовке .exe .
    /SAFESEH[:NO]Указывает на то, что образ будет содержать таблицу безопасных обработчиков исключений.
    /SECTION:name, [[!]{DEKPRSW}][, ALIGN=#]Переопределяет атрибуты секции.
    /SOURCELINKУказывает файл SourceLink для добавления в PDB.
    /STACK:reserve[, commit]Задает размер стека (в байтах).
    /STUB:filenameПрисоединяет программу-заглушку MS-DOS к программе Win32.
    /SUBSYSTEM:{BOOT_APPLICATION| CONSOLE| EFI_APPLICATION|
    EFI_BOOT_SERVICE_DRIVER| EFI_ROM| EFI_RUNTIME_DRIVER| NATIVE| POSIX| WINDOWS| WINDOWSCE}[,#[.##]]
    Сообщает операционной системе, как запустить .exe файл.
    /SWAPRUN:{CD| NET}Сообщает операционной системе, чтобы скопировать выходные данные компоновщика в файл буфера перед его выполнением.
    /TIMEВыходные данные компоновщика передают сведения о времени.
    /TLBID:#Указывает идентификатор ресурса библиотеки типов, создаваемой компоновщиком.
    /TLBOUT:имя файлаУказывает имя файла и других выходных .tlb файлов MIDL.
    /TSAWARE[:NO]Создает приложение, специально рассчитанное на запуск под управлением сервера терминалов.
    /USEPROFILEИспользует обучающие данные по оптимизации с помощью профилей для создания оптимизированного образа.
    /VERBOSE[:{ICF| LIB| REF| SAFESEH}]Печатает сообщения хода выполнения компоновщика.
    /VERSION:#[.#]Присваивает номер версии.
    /WHOLEARCHIVEВключает каждый файл объекта из указанных статических библиотек.
    /WINMDВключает создание файлов метаданных среды выполнения Windows.
    /WINMDFILEУказывает имя файла для выходного файла среда выполнения Windows метаданных (winmd), созданного параметром /WINMD компоновщика.
    /WINMDKEYFILEЗадает ключ или пару ключей для подписи файла метаданных среды выполнения Windows.
    /WINMDKEYCONTAINERУказывает контейнер ключей для подписания файла метаданных Windows.
    /WINMDDELAYSIGNЧастично подписывает файл метаданных.winmd среда выполнения Windows путем размещения открытого ключа в winmd-файле.
    /WX[:NO]Обрабатывает предупреждения компоновщика как ошибки.
    Ссылки:
     
    Последнее редактирование: 2 дек 2025
    GRAFik нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    Программа lib.exe
    Библиотечный менеджер, создающий и обслуживающий стандартные библиотеки времени выполнения. С помощью lib.exe можно выполнить все действия с lib-файлом: создание, добавление, удаление и замену модулей.
    Утилита lib.exe запускается командной строкой:
    LIB входная библиотека [ключи] [команды] [, [файл листинга] [, [выходная библиотека]]] [;]

    Значения ключей
    КлючДействие
    /DEF[:имя файла]Создание библиотеку импорта и файл экспорта.
    /ERRORREPORT:{NONE| PROMPT| QUEUE| SEND}Устарело. Отчеты об ошибках. Дополнительные сведения см. в разделе Запуск программы LIB.
    /EXPORT:symbolЭкспортирует функцию из программы.
    /EXTRACT:membernameСоздание файл объекта (.obj), содержащий копию элемента существующей библиотеки.
    /INCLUDE:symbolДобавляет символ в таблицу символов.
    /LIBPATH:dirПереопределяет путь к библиотеке среды.
    /LINKREPRO:dirСоздает артефакты, необходимые для воспроизведения lib.exe сбоя или внутренней ошибки.
    /LINKREPROTARGET:имя файлаСоздает артефакты /LINKREPRO только при использовании lib.exe с указанным файлом.
    /LINKREPROTARGET:имя файла
    /LIST[:имя файла]Отображает сведения о выходной библиотеке для стандартных выходных данных.
    /LTCGВызывает создание библиотеки с помощью создания кода во время компоновки.
    /MACHINE:{ARM64| ARM64X| EBC| X64| X86}Указывает целевую платформу для программы.
    /NAME:имя файлаПри создании библиотеки импорта указывает имя библиотеки DLL, для которой создается библиотека импорта.
    /NODEFAULTLIB[:library]Удаляет одну или несколько библиотек по умолчанию из списка библиотек, которые он выполняет поиск при разрешении внешних ссылок.
    /NOLOGOПодавляет отображение сообщения об авторских правах LIB и номера версии и предотвращает эхо командных файлов.
    /OUT:имя файлаПереопределяет имя выходного файла по умолчанию.
    /REMOVE:membernameОкупит объект из выходной библиотеки.
    /SUBSYSTEM:{BOOT_APPLICATION| CONSOLE| EFI_APPLICATION| EFI_BOOT_SERVICE_DRIVER| EFI_ROM| EFI_RUNTIME_DRIVER| NATIVE| POSIX| WINDOWS| WINDOWSCE}[,#[.##]]Сообщает операционной системе, как запустить программу, созданную путем связывания с выходной библиотекой.
    /VERBOSEОтображает сведения о ходе сеанса, включая имена добавляемых .obj файлов.
    /WX[:NO]Обработайте предупреждения как ошибки.
    /WX[:nnnn[, nnnn...]]
    Создание lib-файлов из системных dll-файлов
    Стандартные библиотеки содержат объекты и создаются с помощью утилиты lib.exe. Библиотеки импорта содержат сведения об экспорте в другие программы и создаются либо компилятором link.exe при построении программы, содержащей экспорт, либо утилитой lib.exe.
    Назначение lib-файлов ― предоставление программе link.exe информации о внешних ссылках на WinAPI-функции внутри системных dll-файлов. lib-файл ― это архив, который хранит набор сопоставлений "внешний символ" ― ссылка на объектный (COFF или PE) файл. Этот "символ" на стадии линковки либо добавляется в исполняемый образ (в случае с COFF ― из перекомпилированного объектного файла), либо ― прописывается в таблице импорта (в случае с PE). То есть некоторый объем внешних ссылок транслируется в ваш exe или dll.
    Как из содержимого def- и inc-файлов создать lib-файл
    Подробно о создании def- и inc-файлов из системного dll-файла из папки %windir%\System32 рассказано в топике об утилите dumpbin.exe
    Допустим создаем user32.lib ― понадобится файл user32.def
    set FileName=user32
    link -lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64

    того же результата можно добиться строкой
    lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64

    удаляем программный мусор
    if exist %FileName%.def del %FileName%.def
    if exist %FileName%.exp del %FileName%.exp
     
    Последнее редактирование: 2 дек 2025
    GRAFik нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    Утилита dumpbin.exe
    Программа используется для исследования загружаемых и объектных модулей COFF-формата и выводит информацию в текущую консоль.
    Утилита dumpbin.exe запускается командной строкой:
    DUMPBIN [options] [files]

    Ключи данной программы:
    КлючДействие
    /ALLвыводит всю доступную информацию о модуле, кроме ассемблерного кода
    /ARCHвыводит содержимое секции.arch заголовка модуля
    /ARCHIVEMEMBERSвыводит минимальную информацию о элементах объектной библиотеки
    /CLRHEADER
    /DEPENDENTSвыводит имена динамических библиотек, откуда данным модулем импортируются функции
    /DIRECTIVESвыводит содержимое секции.drective, создаваемой компилятором (только для объектных модулей)
    /DISASM[:{BYTES| NOBYTES}]дизассемблирует содержимое секций модуля с использованием и символьной информации, если она присутствует там
    /ERRORREPORT:{NONE| PROMPT| QUEUE| SEND}Отчеты об ошибках
    /EXPORTSвыдает все экспортируемые модулем имена
    /FPO
    /HEADERSвыдает заголовки модуля и всех его секций. В случае объектной библиотеки выдает заголовки всех составляющих ее объектных модулей
    /IMPORTS[:имя файла]выдает все имена, импортируемые данным модулем
    /LINENUMBERSвыдает номера строк объектного модуля, если таковые имеются
    /LINKERMEMBER[:{1| 2| 4| 8| 16| 32}]выдает все имена в объектной библиотеке, определяемые как public
    /LINKERMEMBER:1в порядке следования объектных модулей в библиотеке
    /LINKERMEMBER:2вначале выдает смещение и индекс объектных модулей, а затем список имен в алфавитном порядке для каждого модуля
    /LINKERMEMBERсочетание ключей 1 и 2
    /LOADCONFIG
    /NOLOGOПодавляет отображение сообщения об авторских правах и номера версии DUMPBIN. Предотвращает эхо командных файлов.
    /NOPDB
    /OUT:имя файлаопределяет, что вывод осуществляется не в консоль, а в файл (/OUT:ED.TXT)
    /PDATAвыдает содержимое таблиц исключения
    /PDBPATH[:VERBOSE]
    /RANGE:vaMin[,vaMax]
    /RAWDATA[:{NONE| 1| 2| 4| 8}[,#]]выдает дамп каждой секции файла. Разновидности данного ключа: /RAWDATA:BYTE, /RAWDATA:SHORTS, /RAWDATA:LONGS, /RAWDATA:NONE, /RAWDATA:,number. Здесь number определяет ширину строк
    /RELOCATIONS
    /SECTION:name
    /SUMMARYвыдает минимальную информацию о секциях
    /SYMBOLSвыдает таблицу символов COFF-файла
    /TLS
    /UNWINDINFO
    Создание inc-файлов из системных dll
    inc-файлы ― это текстовые файлы содержащие описания структур данных и констант Windows, а также макроопределения.
    inc-файлы формируются программистом по мере расширения используемых им средств операционной системы. Аналогичны заголовочным h/hpp-файлам используемых при программировании на C/C++, иногда можно сформировать inc-файлы из h-файлов используя утилиту h2inc.exe (ее можно найти в старых пакетах MASM). Для создания inc-, def- и lib-файлов используем bat-файл. В bat-файле создаем переменную %FileName% ― это имя "препарируемой dll". Обработку начнем с user32.dll и в результате получим user32.txt файл
    set FileName=user32
    dumpbin.exe /EXPORTS %windir%\System32\%FileName%.dll /OUT:%FileName%.txt
    @echo EXPORTS >> %FileName%.def
    for /f "skip=16 tokens=1-4" %%a in (%FileName%.txt) do ( if "%%a"=="Summary" goto :exit
    if "%%d"=="" ( @echo extern __imp_%FileName%_ordinal%%a:qword >> %FileName%.inc
    @echo %FileName%_ordinal%%a TEXTEQU ^<__imp_%FileName%_ordinal%%a^> >> %FileName%.inc
    @echo %FileName%_ordinal%%a=ordinal%%a @%%a NONAME >> %FileName%.def​
    ) else ( if not "%%d"=="(forwarded" ( @echo extern __imp_%%d:qword >>
    %FileName%.inc
    @echo %%d TEXTEQU ^<__imp_%%d^> >> %FileName%.inc
    @echo %%d=__imp_%%d >> %FileName%.def )))​
    :exit
    link -lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64

    Разбор bat-файла
    dumpbin.exe /EXPORTS %windir%\System32\%FileName%.dll /OUT:%FileName%.txt

    содержимое user32.txt
    Dump of file C:\Windows\System32\user32.dll
    File Type: DLL
    Section contains the following exports for USER32.dll
    00000000 characteristics
    4CE799CD time date stamp Sat Nov 20 17:50:05 2010
    0.00 version
    1500 ordinal base
    1003 number of functions
    830 number of names​
    ordinal hint RVA name
    1502 0 000083C0 ActivateKeyboardLayout
    1503 1 0002AD40 AddClipboardFormatListener
    1504 2 000235B8 AdjustWindowRect
    1505 3 00017CE4 AdjustWindowRectEx
    ....
    2341 33C 0007B430 wvsprintfA
    2342 33D 00020BFC wvsprintfW
    1500 0002B260 [NONAME]
    1501 0002AE80 [NONAME]
    ....​
    Summary
    2000 .data
    A000 .pdata
    10000 .rdata
    1000 .reloc
    5B000 .rsrc
    81000 .text​

    после просмотра user32.txt видно, что из user32.dll импортируется 846 функции, из них 826 функций импортируются по именам, 16 ― по ординалам, а функции DefDlgProcA, DefDlgProcW, DefWindowProcA, DefWindowProcW портируются в user32.dll из системной библиотеки NTDLL.dll
    Dump of file C:\Windows\System32\user32.dll
    File Type: DLL
    Section contains the following exports for USER32.dll
    00000000 characteristics
    4CE799CD time date stamp Sat Nov 20 17:50:05 2010
    0.00 version
    1500 ordinal base
    1003 number of functions
    830 number of names
    ordinal hint RVA name
    1502 0 000083C0 ActivateKeyboardLayout <-- полезная информация начинается здесь​


    Если перед началом обработки в каталоге уже существуют файлы user32.inc, user32.def, user32.lib оставшиеся от предыдущей обработки dll-файлов ― удаляем их.
    if exist %FileName%.inc del %FileName%.inc
    if exist %FileName%.def del %FileName%.def

    создаем файл user32.def, который должен начинаться со строки "EXPORTS"
    @echo EXPORTS >> %FileName%.def

    полезная информация начинается в user32.txt с 16 строки, поэтому skip=16 означает ― пропускаем первые 16 строк в user32.txt
    при построчном разборе файла user32.txt используем четыре первых слова в строке, которым присвоим имена %%a, %%b, %%c, %%d
    for /f "skip=16 tokens=1-4" %%a in (%FileName%.txt) do

    если первый параметр равен "Summary" ― значит обработаны все функции, входящие в dll, мы прекращаем обработку, выходим из файла user32.txt и переходим на метку :exit
    if "%%a"=="Summary" goto :exit

    если четвертый параметр в файле user32.txt пустой ― перед нами импорт по ординалам
    %%a____%%b_____%%c_____%%d
    1500____0002B260_[NONAME]

    сохраняем первое слово (ординал WinAPI-функции) в строке user32.txt в переменной %%a, обрамляем ее и помещаем в две новых строки в файл user32.inc
    extern __imp_user32_ordinal1500:qword
    user32_ordinal1500 TEXTEQU <__imp_user32_ordinal1500>

    и user32.def
    user32_ordinal1500=ordinal1500 @1500 NONAME

    если четвертый параметр непустой ― перед нами импорт по именам функций
    в очередной строке файла user32.txt
    %%a___%%b__%%c______%%d
    1502____0_____000083C0__ActivateKeyboardLayout

    четвертое слово в строке (имя WinAPI-функции), сохраняем в переменной %%d, создаем две новых строки в файле user32.inc, предваряем %%d "extern __imp_" строку завершаем ":qword", добавляем "TEXTEQU", "__imp_", экранируем управляющие символы "<" и ">" (^<__imp_%%d^>) чтобы bat-файл воспринимал их, как обычные символы.
    extern __imp_ActivateKeyboardLayout:qword
    ActivateKeyboardLayout TEXTEQU <__imp_ActivateKeyboardLayout>

    и user32.def
    ActivateKeyboardLayout=__imp_ActivateKeyboardLayout

    если четвертый параметр равен "(forwarded", значит WinAPI-функция берется из другой dll и мы пропускаем такую строку.
    %%a___%%b____%%c________%%d
    1657____94______DefDlgProcA__(forwarded to NTDLL.NtdllDialogWndProc_A)

    из содержимого файлов user32.def и user32.inc создаем файл user32.lib
    link -lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64

    того же результата можно добиться строкой
    lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64
     
    Последнее редактирование: 1 дек 2025
    GRAFik нравится это.
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    cvtres.exe
    Утилита cvtres.exe запускается командной строкой:
    __CVTRES__ [options]__[files]___

    Ключи данной программы:
    КлючиДействие
    /DEFINE:symbol
    /FOLDDUPS
    /MACHINE:{ARM| EBC| IA64| X64| X86}
    /NOLOGOПодавляет отображение сообщения об авторских правах и номера версии CVTRES. Предотвращает эхо командных файлов
    /OUT:filename
    /READONLY
    /VERBOSEОтображает сведения о ходе сеанса, включая имена добавляемых obj-файлов
    rc.exe /v rsrc.rc
    Cvtres.exe /machine:x64 rsrc.res
    link.exe /SUBSYSTEM:WINDOWS %FileName%.obj rsrc.obj

    Cvtres.exe выполняет функции компилятора ресурсов. Cvtres.exe — это исполняемый файл, сокращённо обозначающий утилиту преобразования файлов ресурсов Microsoft в объектные файлы COFF. Утилита отвечает за преобразование файлов сценариев ресурсов (.rc) в объектные файлы COFF (Common Object File Format) (.obj). Является частью инструментов разработки Microsoft, в частности набора компиляторов C++. В процессе компиляции cvtres.exe принимает на вход файл сценария ресурсов и компилирует его в объектный файл, содержащий скомпилированные ресурсы. Это гарантирует, что ресурсы, указанные в скрипте ресурсов, будут правильно интегрированы в приложение, что позволит получать доступ к визуальным элементам, компонентам пользовательского интерфейса и другим ресурсам и использовать их во время выполнения. Cvtres.exe работает в фоновом режиме во время компиляции и обеспечивает эффективное связывание скомпилированных ресурсов с кодом приложения, в результате чего получается полностью функциональный и визуально привлекательный программный продукт.
    Файлы сценариев ресурсов передаются в cvtres.exe вместе с другими необходимыми файлами в процессе компиляции, и эти файлы сценариев ресурсов обрабатываются как входные данные. Cvtres.exe выполняет ряд задач, включая синтаксический анализ, компиляцию и создание файла объектов ресурсов. Сначала он анализирует файлы сценариев ресурсов, чтобы определить ресурсы и их свойства. Затем каждый ресурс компилируется в отдельный объектный файл, содержащий скомпилированное двоичное представление данных ресурса. Генерирует объектные файлы (.obj), содержащие скомпилированные ресурсы. Эти объектные файлы специфичны для каждого ресурса, определённого в скрипте ресурсов. Cvtres.exe поддерживает компиляцию многоязычных ресурсов, что позволяет разработчикам включать в свои приложения локализованные ресурсы для разных языков.
    Cvtres.exe предоставляет возможности для сжатия и оптимизации ресурсов, уменьшения их размера и повышения производительности во время выполнения. Это может быть особенно полезно при работе с большими или сложными ресурсами, поскольку позволяет эффективно использовать системные ресурсы.
    Cvtres.exe также может извлекать и изменять ресурсы из скомпилированных приложений. Это может быть полезно для решения таких задач, как извлечение значков, изменение текстовых строк или настройка определённых ресурсов в приложении.
     
    Последнее редактирование: 6 дек 2025
    GRAFik нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174

    Утилита implib

     
    Последнее редактирование: 6 дек 2025
  7. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    566
    Может кто не знает - MASM входит в состав VisualStudio.

    По крайней мере у меня, в кастрированном варианте студии, без IDE, под названием MS C++ BuildTools он точно есть. То есть, если я инициализирую консоль студийными переменными окружения (vcvarsall.bat), то становятся доступными не только компилятор С++, линкер и прочие инструменты, но и в том числе и ml.exe/ml64.exe (в зависимости от выбранной разрядности инициализируемой среды).

    Ну и, естественно, доступны все импорт-либы от С++, что очень радует.

    Правда утилиты h2inc.exe у меня почему-то нет, как нет и хедеров с декларациями WinAPI-шных вещей. И если proto написать не так уж сложно, то вот деклараций структур и констант ощеньна не хватает :dntknw:

    Было бы интересно узнать, доступен ли также ml.exe/ml64.exe в обычной IDE-шной версии студии (я так понимаю, в ней тоже должен быть скрипт vcvarsall.bat для возможности консольной работы с инструментами). Если это так и есть, то это очень здорово, и означает, что можно прямо вот так сходу сесть и написать крошечный exe-шник чисто на асме практически на любом виндовом компе, где есть студия (что весьма распространено среди разработчиков и не только).
     
  8. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.642
    Если запустить командную строку разработчика из Visual Studio, там есть ml.exe
    Также можно банально в студии компилировать .asm файлы
     
  9. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    566
    Эх, если б там еще были и asm-хэдеры винапишных вещей, было бы вообще замечательно.
     
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.642
    Mikl___ и GRAFik нравится это.
  11. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    319
    Почему нельзя собрать все в одном месте, чтобы .asm компилировался из батника?
    Сделать .html файл с информацией ключ -> действие для каждой утилиты.
     
    Последнее редактирование: 27 ноя 2025
  12. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.642
    Research, можно, делайте.
    EuroAsm вам в помощь или можете запилить свою утилиту.
     
    Mikl___ нравится это.
  13. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    319
    Имеется в виду: чистая сборка masm 32-64, работающая на любой винде от 7 до 11.
    И чтобы была уверенность, что сборка без сюрпризов. Набор .exe, .dll, хедеров, и базовых примеров.
     
  14. E.D.

    E.D. New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2017
    Сообщения:
    9
    Обратитесь со своими пожеланиями в Microsoft. Ппока у них другое мнение, они запихали всё в студию. Здесь на сайте есть подробная инструкция где и что взять из студии и как это собрать в кучу.
     
  15. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    319
    bill_gates@microsoft.com? Если с днем благодарения их поздравить, быстрее вопрос решат? Лучше с наездом написать, чтобы подчеркнуть серьёзность и авторитет автора письма, или спокойно без претензий и угроз?
     
  16. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.642
    Вы шутите?) Негрософт от Си лет 20 как отказалась, винапи хочет убрать, перевести всех на дотнет и uwp или что там.
    А вы им про асм.

    Они категорически против "неуправляемого кода" уже лет так с 20.
     
    Mikl___ и Ahimov нравится это.
  17. CaptainObvious

    CaptainObvious Member

    Публикаций:
    1
    Регистрация:
    18 янв 2024
    Сообщения:
    96
    Они всех подсадили на свои ide. В этом корень проблемы. Погромистам трудно проблему признать что это не удобно, и что реально написать чтото свое - кишка тонка, ведь тогда пошатнется их мания величия(столкновение с суровой реальностью), а это опять дискомфортно.
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.174
    Целый цикл Сказки дядюшки Римуса о x64 написан на виндовом компе (сперва 64-разрядная XP, затем 7, затем 10). IDE в разделе IDE. Интегрированные среды разработки на любой вкус. А bat-ники и скрипты ― это уже зависит от ваших предпочтений...
     
    Последнее редактирование: 28 ноя 2025
    M0rg0t нравится это.
  19. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    319
    К примеру, мне нужно чтобы при зажатом ctrl и клике на функцию в коде, открывалась новая вкладка, и показывался код с этой функцией:

    2025-11-28_18-49-37.png

    После клика:

    2025-11-28_18-47-35.png

    Сомневаюсь, что среди 'иде на любой вкус' есть хотябы это.

    Кроме вс кода, которая как раз от тех кто против 'неуправляемого кода'.
     
    Последнее редактирование: 28 ноя 2025
  20. E.D.

    E.D. New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2017
    Сообщения:
    9
    RadAsm, WinAsm Studio