Почему я топлю за чистую сборку. В будущем для подобных вещей можно сделать небольшие опенсорсные утилиты для облегчения автоматизации. (4. Базовые утилиты) Код (Pascal): function EnableDebugPrivilege(const Value: Boolean): Boolean; const SE_DEBUG_NAME = 'SeDebugPrivilege'; var hToken: THandle; tp: TOKEN_PRIVILEGES; d: DWORD; begin Result := False; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then begin tp.PrivilegeCount := 1; LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid); if Value then tp.Privileges[0].Attributes := $00000002 else tp.Privileges[0].Attributes := $80000000; AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d); if GetLastError = ERROR_SUCCESS then begin Result := True; end; CloseHandle(hToken); end; end; //EnableDebugPrivilege procedure _add_command(root, cmd_name, file_name: string); var s: string; Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; Reg.OpenKey(root, true); Reg.CreateKey(cmd_name); Reg.OpenKey(cmd_name, false); Reg.CreateKey('command'); Reg.OpenKey('command', false); s := format('"%s"', [file_name]) + ' "%1"'; Reg.WriteString('', s); finally Reg.CloseKey; Reg.Free; end; end; //_add_command const sz_cmd = '-- Open .py --'; const sz_file = '*\shell'; var s: string; begin s := OpenFile(ExtractFilePath(ParamStr(0)), '', 'exe'); if FileExists(s) then begin if EnableDebugPrivilege(True) then begin _add_command(sz_file, sz_cmd, s); Writeln('Done!'); end else begin Writeln('Error, need admin privileges'); end; end else begin Writeln('Error, select file'); end; Readln; end. Пишется небольшое оконное приложение с галочками. Там выбирается /link, SUBSYSTEM, выбираются kernel32.lib user32.lib в 2 клика. Вопрос об универсальном bat файле, это вопрос о default настройках этой будущей небольшой утилиты если до нее дойдет энергия форума. Оконное приложение передающее нужные параметры в ml64.
Начните с VS 2022 Pro , если не взлетит, то тогда VS 2017 Pro. VS 2017, по-моему, 100% заработает на Windows 7. https://gist.github.com/Chenx221/6f4ed72cd785d80edb0bc50c9921daf7
Уже пошел треш. https://gist.github.com/Chenx221/6f4ed72cd785d80edb0bc50c9921daf7 Будем использовать оф. источники. https://visualstudio.microsoft.com/ru/vs/older-downloads/ Есть несколько версий Professional, Enterprise, Community. Давайте заранее договоримся какую именно из них будем скачивать для проверки совместимости со всеми версиями винды. Можно начать с VS 2022 Pro
Вот с 2022 Pro и начинайте, если взлетит - будет идеально, у меня тоже 2022 Pro. Мне, кажется, должна на Win 7 заработать. Если нет, то 2017 уж точно. У меня она, кстати, тоже установлена. Всё "руки не дохоят" удалить.
Первая проблема с которой я столкнулся. С официального сайта нейльзя скачать ни 2022, ни 2017. Редирект на эту ссылку и зависание: https://my.visualstudio.com/_public/_MsalSignedInFps
А на гитхабе те же ссылки ? Проверить. Может с него получится? На руборде ещё что-то есть, посмотрите там.
В общем оставался у меня build tools 2019 студии. Зашел в Hostx64, взял: ml64.exe link.exe link.exe.config cvtres.exe dumpbin.exe lib.exe Как оказалось чтобы заработали link.exe, lib.exe, dumpbin.exe и т. д. нужно было еще взять с собой tbbmalloc.dll --- Сообщение объединено, 6 мар 2026 --- Далее нужно достать все необходимые api-ms-win-crt*.dll. У них есть цифровые подписи, им не надо чситать хеш. --- Сообщение объединено, 6 мар 2026 --- Хорошая новость: --- Сообщение объединено, 6 мар 2026 --- Чем больше углубляюь в это, тем сильнее прихожу к убеждению что сделать сначала чистую, совместимую со всеми версиями винды сборку, - правильная идея. 1. Собрать подписанную цифровыми подписями сборку со всеми runtime .dll 2. Найти include/lib 3. Сделать корректный .bat файл 4. Собрать базовый пример: Код (ASM): OPTION DOTNAME ; разрешить использовать точку в имени переменной option casemap:none ; различать в именах Строчные и прописные буквы include \masm64\include\temphls.inc ; в этом файле описание invoke и другие высокоуровневые инструкции include \masm64\include\win64.inc ; здесь описаны константы NULL и MB_OK include \masm64\include\kernel32.inc ; здесь описаны функции из библиотеки kernel32.dll includelib \masm64\lib\kernel32.lib include \masm64\include\user32.inc ; здесь описаны функции из библиотеки userl32.dll includelib \masm64\lib\user32.lib OPTION PROLOGUE:none ; пролог функций пишем сами OPTION EPILOGUE:none ; эпилог функций пишем сами .data ; данные MsgCaption db "Win64 Iczelion's lesson #2: MessageBox",0 MsgBoxText db "Win64 Assembly is Great!",0 .code ; код программы WinMain proc sub rsp,28h invoke MessageBox, NULL, &MsgBoxText, &MsgCaption, MB_OK invoke ExitProcess,NULL WinMain endp end --- Сообщение объединено, 6 мар 2026 --- Для vs 2019 exe и dll файлы без runtime dll https://drive.google.com/file/d/1Tchu5a7fU9h3dgISgE9iQCTULkbHyJ1A/view?usp=drive_link --- Сообщение объединено, 6 мар 2026 --- Mikl___, Dmitry_Milk, GRAFik, у многих по любому есть свои наборы файлов рипнутые с какой то версии vs. Если не трудно, поделитесь у кого что получилось, желательно с информацией о версии vs с которой это было взято. Так будет быстрее разобраться. --- Сообщение объединено, 6 мар 2026 --- Т. к. есть цифровые подписи - то нет смысла беспокоиться, можно собрать несколько версий хоть до 2026. По поводу рантаймов: на первое время могу написать .py скрипт, который будет их автоматичеки складывать куда надо. Если все будет хорошо работать, можно написать инсталятор. --- Сообщение объединено, 6 мар 2026 --- Для внесения измений в реестр (ассоциации ассемблерных файлов с файлом asm.bat) в первое время можно использовать готовые .py скрипты. --- Сообщение объединено, 6 мар 2026 --- Пардон. На тот момент я был не в курсе что ms предусмотрительно добавили цифровые подписи во все свои файлы. --- Сообщение объединено, 6 мар 2026 --- Почему выбор пал на python скрипты. python весит всего 26 мб. И имеет цифровые подписи. На первое время на нем можно наладить всю рутину без установки дополнительных библиотек прямо из .py скриптов. Технически возможен такой вариант: Компилируется инсталятор из .asm файла с помощью сборки. Но в начале все нужно наладить на python, чтобы потом с 1 раза переписать его на asm.
Не знаю, но может быть кому-то поможет. Создаю папку masm64, чтобы было меньше проблем ― создаю ее в корневом каталоге. В этой папке создаю папки bin, include, lib, samples, help. Папка bin для того что надергаю из VS (ml64.exe, link.exe, link.exe.config, cvtres.exe, dumpbin.exe, lib.exe, rc.exe), универсальный bat-файл, рипер ресурсов, x64dbg и все остальное, что потребуется. Папки incude и lib ― для inc- и lib-файлов. Папка samples ― рабочая, для сборки exe-/dll-/sys-файлов. Папка help ― для help-файлов, мануалов, просмотрщиков hlp-/chm-файлов
1. Собрать подписанную цифровыми подписями сборку со всеми runtime .dll 2. Найти include/lib(by Hutch, библиотека от Vasiliy, напрямую от Microsoft) 3. Сделать корректный .bat файл Если не сложно, просьба поделиться файлами через файлообменник. Например https://www.sendspace.com/. И сказать версию студии, если она известна. Хотелось бы разобраться с файлами api-ms-win-crt*.dll какие файлы нужны, и в какие места их нужно положить. Знаю, как написать надежный инсталятор с сравнением файлов по маске. Но не знаю какие файлы api-ms-win-crt*.dll и куда копировать. Здесь потребуется помощь, чтобы разобраться. На всех файлах от ms есть цифровые подписи. Файлы весят не много. Можно собрать несколько версий сборки masm от разных версий студии. --- Сообщение объединено, 7 мар 2026 --- Можно на ранних этапах положить инсталлер python. И сделать .bat файл для автоматической установки. Инсталер с цифровой подписью, код скриптов открыт - все прозрачно.
Research, по порядку dsmhelp.narod.ru возможно тут придется пользователю пройти этот путь самому. Начинать от простейшего bat-файла, в каждом проекте, с указанием имени asm-файла. Требуется CONSOLE, GUI, DLL ― под каждый создается отдельный bat-файл. Нужно подключить ресурсы ― создаются еще полдесятка bat-файлов. Вat-файлы размножаются как тараканы. Дальше пользователь открывает для себя строку set filename = "Имя конкретного файла".asm, пользователь будет менять эту строку непосредственно в bat-файле. А от строки set filename=... один шаг до универсального bat-файла ― одного во всей системе
В начале нужны bin/include/Lib/api-ms-win-crt*.dll ? Потом берется .asm и для него пишется .bat? Можно собрать include/Lib от всех трех основных источников. Потом скомпилировать все 31 + уроков. И посмотреть результат.
именно так сделано в masm32. Мы же должны на что-то ориентироваться? В каждом проекте masm32 есть свой makeit.bat, но если программа пишется в IDE qeditor.exe, будут использоваться полу универсальные bat-файлы из папки masm32\bin Можно, но lib- и inc-файлы можно (нужно) сделать и самому из системных DLL
В самом начале надо именно так и сделать. И не ломать голову над универсальностью. Можно в будущем сделать такой эксперимент: собрать все не универсальные .bat в виде одного текста, и предложить LLM выделить общее, чтобы нс накидала идей. Меня больше беспокоит весь этот зоопарк api-ms-win-crt*.dll +
Research, допустим, для первых трех уроков это верно, но дальше нужно сказать ― "хватит бегать по граблям" и уже четвертый урок можно посвятить созданию универсального bat'ника Я обошелся без LLM ― только логика, здравый смысл и статья Урок bat-аники
Случайно на диске завалялся образ VS2008ProEdition90dayTrialENUX1435622.iso. Есть мнение, что с тех пор ни одного положительного изменения в масме не было https://www.sendspace.com/file/okuwu3
f13nd, если судить по История MASM не очень большое увеличение ml64 в размере наблюдается график по связи размера и версии я, конечно же, рисовать не собираюсь...
Research, а вы посмотрите в Windows/SYSTEM32 возможно api-ms-win-crt*.dll там и так уже есть и без установки Visual Studio 2026