Пакет MASM64

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

  1. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    Почему я топлю за чистую сборку. В будущем для подобных вещей можно сделать небольшие опенсорсные утилиты для облегчения автоматизации. (4. Базовые утилиты)
    Код (Pascal):
    1. function EnableDebugPrivilege(const Value: Boolean): Boolean;
    2. const
    3.   SE_DEBUG_NAME = 'SeDebugPrivilege';
    4. var
    5.   hToken: THandle;
    6.   tp: TOKEN_PRIVILEGES;
    7.   d: DWORD;
    8. begin
    9.   Result := False;
    10.   if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then
    11.   begin
    12.     tp.PrivilegeCount := 1;
    13.     LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);
    14.     if Value then
    15.       tp.Privileges[0].Attributes := $00000002
    16.     else
    17.       tp.Privileges[0].Attributes := $80000000;
    18.     AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d);
    19.     if GetLastError = ERROR_SUCCESS then
    20.     begin
    21.       Result := True;
    22.     end;
    23.     CloseHandle(hToken);
    24.   end;
    25. end; //EnableDebugPrivilege
    26.  
    27. procedure _add_command(root, cmd_name, file_name: string);
    28. var
    29.   s: string;
    30.   Reg: TRegistry;
    31. begin
    32.   Reg := TRegistry.Create;
    33.   try
    34.     Reg.RootKey := HKEY_CLASSES_ROOT;
    35.     Reg.OpenKey(root, true);
    36.  
    37.     Reg.CreateKey(cmd_name);
    38.     Reg.OpenKey(cmd_name, false);
    39.  
    40.     Reg.CreateKey('command');
    41.     Reg.OpenKey('command', false);
    42.  
    43.     s := format('"%s"', [file_name]) + ' "%1"';
    44.  
    45.     Reg.WriteString('', s);
    46.   finally
    47.     Reg.CloseKey;
    48.     Reg.Free;
    49.   end;
    50. end; //_add_command
    51.  
    52. const
    53.   sz_cmd = '-- Open .py --';
    54. const
    55.   sz_file = '*\shell';
    56. var
    57.   s: string;
    58. begin
    59.   s := OpenFile(ExtractFilePath(ParamStr(0)), '', 'exe');
    60.   if FileExists(s) then
    61.   begin
    62.     if EnableDebugPrivilege(True) then
    63.     begin
    64.       _add_command(sz_file, sz_cmd, s);
    65.       Writeln('Done!');
    66.     end
    67.     else
    68.     begin
    69.       Writeln('Error, need admin privileges');
    70.     end;
    71.   end
    72.   else
    73.   begin
    74.     Writeln('Error, select file');
    75.   end;
    76.   Readln;
    77. end.
    Пишется небольшое оконное приложение с галочками. Там выбирается /link, SUBSYSTEM, выбираются kernel32.lib user32.lib в 2 клика. Вопрос об универсальном bat файле, это вопрос о default настройках этой будущей небольшой утилиты если до нее дойдет энергия форума. Оконное приложение передающее нужные параметры в ml64.
     
    Последнее редактирование: 6 мар 2026
  2. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    418
    Начните с VS 2022 Pro , если не взлетит, то тогда VS 2017 Pro. VS 2017, по-моему, 100% заработает на Windows 7.

    https://gist.github.com/Chenx221/6f4ed72cd785d80edb0bc50c9921daf7
     
  3. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    Уже пошел треш.

    https://gist.github.com/Chenx221/6f4ed72cd785d80edb0bc50c9921daf7

    Будем использовать оф. источники.

    https://visualstudio.microsoft.com/ru/vs/older-downloads/

    Есть несколько версий Professional, Enterprise, Community. Давайте заранее договоримся какую именно из них будем скачивать для проверки совместимости со всеми версиями винды. Можно начать с VS 2022 Pro
     
  4. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    418
    Вот с 2022 Pro и начинайте, если взлетит - будет идеально, у меня тоже 2022 Pro. Мне, кажется, должна на Win 7 заработать. Если нет, то 2017 уж точно. У меня она, кстати, тоже установлена. Всё "руки не дохоят" удалить. :)
     
  5. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    Первая проблема с которой я столкнулся.
    С официального сайта нейльзя скачать ни 2022, ни 2017.
    Редирект на эту ссылку и зависание:
    https://my.visualstudio.com/_public/_MsalSignedInFps
     
  6. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    418
    А на гитхабе те же ссылки ? Проверить. Может с него получится? На руборде ещё что-то есть, посмотрите там.
     
  7. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    В общем оставался у меня 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 ---
    2026-03-06_21-36-53.png Хорошая новость:
    --- Сообщение объединено, 6 мар 2026 ---
    Чем больше углубляюь в это, тем сильнее прихожу к убеждению что сделать сначала чистую, совместимую со всеми версиями винды сборку, - правильная идея.

    1. Собрать подписанную цифровыми подписями сборку со всеми runtime .dll
    2. Найти include/lib
    3. Сделать корректный .bat файл
    4. Собрать базовый пример:
    Код (ASM):
    1. OPTION DOTNAME ; разрешить использовать точку в имени переменной
    2. option casemap:none ; различать в именах Строчные и прописные буквы
    3. include \masm64\include\temphls.inc ; в этом файле описание invoke и другие высокоуровневые инструкции
    4. include \masm64\include\win64.inc  ; здесь описаны константы NULL и MB_OK
    5. include \masm64\include\kernel32.inc ; здесь описаны функции из библиотеки kernel32.dll
    6. includelib \masm64\lib\kernel32.lib
    7. include \masm64\include\user32.inc  ; здесь описаны функции из библиотеки userl32.dll
    8. includelib \masm64\lib\user32.lib
    9. OPTION PROLOGUE:none ; пролог функций пишем сами
    10. OPTION EPILOGUE:none ; эпилог функций пишем сами
    11. .data                ; данные
    12. MsgCaption      db "Win64 Iczelion's lesson #2: MessageBox",0
    13. MsgBoxText      db "Win64 Assembly is Great!",0
    14. .code                ; код программы
    15. WinMain proc
    16.     sub rsp,28h
    17.       invoke MessageBox, NULL, &MsgBoxText, &MsgCaption, MB_OK
    18.       invoke ExitProcess,NULL
    19. WinMain endp
    20. 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.
    2026-03-06_22-44-14.png
     
  8. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    Не знаю, но может быть кому-то поможет. Создаю папку 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-файлов
     
  9. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    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 файл для автоматической установки. Инсталер с цифровой подписью, код скриптов открыт - все прозрачно.
     
    Последнее редактирование: 7 мар 2026
  10. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    Research, по порядку
    dsmhelp.narod.ru
    возможно тут придется пользователю пройти этот путь самому. Начинать от простейшего bat-файла, в каждом проекте, с указанием имени asm-файла. Требуется CONSOLE, GUI, DLL ― под каждый создается отдельный bat-файл. Нужно подключить ресурсы ― создаются еще полдесятка bat-файлов. Вat-файлы размножаются как тараканы. Дальше пользователь открывает для себя строку set filename = "Имя конкретного файла".asm, пользователь будет менять эту строку непосредственно в bat-файле. А от строки set filename=... один шаг до универсального bat-файла ― одного во всей системе
     
  11. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    В начале нужны bin/include/Lib/api-ms-win-crt*.dll ? Потом берется .asm и для него пишется .bat?

    Можно собрать include/Lib от всех трех основных источников. Потом скомпилировать все 31 + уроков. И посмотреть результат.
     
  12. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    именно так сделано в masm32. Мы же должны на что-то ориентироваться? В каждом проекте masm32 есть свой makeit.bat, но если программа пишется в IDE qeditor.exe, будут использоваться полу универсальные bat-файлы из папки masm32\bin
    Можно, но lib- и inc-файлы можно (нужно) сделать и самому из системных DLL
     
  13. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    В самом начале надо именно так и сделать. И не ломать голову над универсальностью.

    Можно в будущем сделать такой эксперимент: собрать все не универсальные .bat
    в виде одного текста, и предложить LLM выделить общее, чтобы нс накидала идей.

    Меня больше беспокоит весь этот зоопарк api-ms-win-crt*.dll
    +
     
    Последнее редактирование: 7 мар 2026
  14. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    Research,
    допустим, для первых трех уроков это верно, но дальше нужно сказать ― "хватит бегать по граблям" и уже четвертый урок можно посвятить созданию универсального bat'ника
    Я обошелся без LLM ― только логика, здравый смысл и статья Урок bat-аники
     
  15. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.153
    Случайно на диске завалялся образ VS2008ProEdition90dayTrialENUX1435622.iso. Есть мнение, что с тех пор ни одного положительного изменения в масме не было :acute:
    https://www.sendspace.com/file/okuwu3
     
    Research и Mikl___ нравится это.
  16. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    f13nd,
    если судить по История MASM не очень большое увеличение ml64 в размере наблюдается :scratch_one-s_head:график по связи размера и версии я, конечно же, рисовать не собираюсь...
     
  17. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.153
    Увеличение размера это отрицательное изменение. В данном контексте.
     
    Mikl___ нравится это.
  18. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.223
    Research,
    а вы посмотрите в Windows/SYSTEM32 возможно api-ms-win-crt*.dll там и так уже есть и без установки Visual Studio 2026
     
  19. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.153
  20. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    455
    1587913270122520932.jpg

    С этими файлами что делать?
    2026-03-07_05-32-49.png