Вопрос 1-й: что необходимо для работы ml64, к примеру я хочу собрать свой вариант для работы с 64 битным компилятором, и к примеру используя нотепад+. Вопрос 2й: для чего нужны эти файлы в сборке Хатчинсона, кроме link, dumpbin,lib,ml ... эти понятно зачем, и большей части файлов в 2010 студии нету к примеру, сейчас 2015 качаю... bin64 directory --------------- cvtres.exe dumpbin.exe editbin.exe lib.exe link.exe link.exe.config ml64.exe msobj140.dll mspdb140.dll mspdbcmf.exe mspdbcore.dll mspdbsrv.exe mspdbst.dll mspft140.dll msvcdis140.dll msvcp140.dll ----------- In dir 1033 ----------- bscmakeui.dll clui.dll cvtresui.dll linkui.dll LocalESPCui.dll mspdbcmfui.dll mspft140ui.dll pgort140ui.dll pgoui.dll Вопрос 3й: в чем разница компиляторов 64 битного и 32 битного ml64? просто где то наткнулся на сообщение что 64 битный тормозит и глючит.
Dm808, подпишись на Visual Studio, она бесплатная, как только установишь, получишь и ml64, и link от 2017. Хатчинсон не хочет связываться с юристами MicroSoft'a поэтому у него такой состав в сборнике
Да где взять я то понял, меня интересует зачем DLL кучу в сборку добавляют (mspdbcore.dll ....и другие) , и почему ml в визуал студии работает с ее либами а в сборке отдельно (Хатчинсон )там что то конфликтует и создаются свои либ файлы?
Dm808, через hiew32 посмотри из каких dll ml64 и link импортируют свои функции, может быть и вопросы отпадут. И VS создана для работы в С++ и т.д. А у тебя ассемблер, поэтому понадобятся свои lib- и inc-файлы Как достать компилятор ML64 или создаем IDE из говна и палок 64-разрядный ассемблерный компилятор и линкер не распространяются отдельно, но ml64.exe и link.exe можно получить бесплатно если дать клятву соблюдать "Лицензионное соглашение" после чего (в образовательных целях ) скачать комплект C++ компиляторов от Дядюшки Билли. Установи Microsoft Visual Studio 17.0 Создай каталог, masm64, а в этом каталоге подкаталоги bin, include, lib, sample Из интернета скачай файл hiew32.exe и размести его в masm64\bin В c:\Program Files (x86)\Microsoft Visual Studio\ 2017\ BuildTools\ VC\bin\amd64 найдешь файлы ml64.exe link.exe link.exe.config cvtres.exe dumpbin.exe lib.exe и скопируй их в папку masm64\bin А в папке c:\Program Files (x86)\Windows Kits\8.1\bin\x64 найдешь файлы rc.exe и rcdll.dll которые также помещай в masm64\bin Чтобы ml64 и link заработали на другом компьютере, где Microsoft Visual Studio 17.0 еще не установлена, понадобится целая куча вспомогательных dll'ок которые находятся в папке Windows\System32 Набираешь в командной строке d:\masm64\bin\hiew32 ml64.exe Нажми на клавишу F4(mode) → Decode, затем на клавишу F8(header), затем на F7(import) функции импортируемые из других файлов и наконец на F7(DLLs) получишь список dll, используемых в файле. Сперва заполни вот такую таблицу вспомогательная dllисполь- зуетсянаходится в каталогеapi-ms-win-crt-conio-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-convert-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-environment-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-filesystem-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-heap-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-locale-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-math-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-process-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-runtime-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-stdio-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-string-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-time-l1-1-0.dllml64.exe link.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64api-ms-win-crt-utility-l1-1-0.dlllink.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64msvcp140.dlllink.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64vcruntime140.dllml64.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64mscoree.dlllink.exeWindows\system32advapi32.dllml64.exe link.exeWindows\system32kernel32.dllml64.exe link.exeWindows\system32imagehlp.dlllink.exeWindows\system32mspdbcore.dlllink.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\bin\amd64msvcdis140.dlllink.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\bin\amd64pgodb140.dlllink.exeProgram Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\bin\amd64 Копируешь файлы api*.dll, а также msvcp140.dll и vcruntime140.dll из папки Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Remote Debugger\x64 а также файлы mspdbcore.dll, msvcdis140.dll, pgodb140.dll из папки Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\bin\amd64 в папку masm64\bin Отправляешься на сайт dsmhelp.narod.ru где, можно найти набор lib- и inc-файлов для создания 64-разрядных приложений на ассемблере, а также кучу полезных макросов
Судя по ответу эти Dll нужны для работы ml и link, по поводу lib файлов не совсем понятно, в VS если делать вставки асм кода все работать будет и с ее библиотеками и инклюдами, тут интуитивно догадываюсь что там будет не чистый асм а совмещение с кодом на каком вставка сделана и похоже библиотеки и инклюды так спецально настроены.... ладно разберусь с этим со временем. Последний вопрос, для работы с ml достаточно папок inc, lib, bin и свой текст редактор? и чем же ml64 (32) отличается от ml64(64)?
Не знаю, возможно чтобы создавать 64-разрядные программы в 32-разрядных Windows. Не заморачивайся, возьми всё 64-разрядные
Я конечно вижу кнопку мне нравится, но все же хочу сказать спасибо лично написав, статьи по всем форумам и труд который Вы вложили впечатляет также, тут мне все ясно, тему наверно можно считать закрытой.
Dm808, lib- и inc-файлы не сложно создать самому из содержимого системных dll'ок Назначение inc и lib файлов inc-файлы ― это текстовые файлы содержащие описания структур данных и констант Windows, а также макроопределения. inc-файлы формируются программистом по мере расширения используемых им средств операционной системы. Аналогичны заголовочным h/hpp-файлам используемых при программировании на C/C++, иногда можно сформировать inc-файлы из h-файлов используя утилиту h2inc.exe (ее можно найти в старых пакетах MASM). Назначение lib-файлов ― предоставление программе link.exe информации о внешних ссылках на WinAPI-функции внутри системных dll-файлов. lib-файл ― это архив, который хранит набор сопоставлений "внешний символ" ― ссылка на объектный (COFF или PE) файл. Этот "символ" на стадии линковки либо добавляется в исполняемый образ (в случае с COFF ― из прекомпилированного объектного файла), либо ― прописывается в таблице импорта (в случае с PE). То есть некоторый объем внешних ссылок транслируется в ваш exe или dll. link.exe обрабатывает стандартные библиотеки COFF и библиотеки импорта COFF, которые имеют расширение LIB. Стандартные библиотеки содержат объекты и создаются с помощью утилиты lib.exe. Библиотеки импорта содержат сведения об экспорте в другие программы и создаются либо компилятором link.exe при построении программы, содержащей экспорт, либо утилитой lib.exe. Для получения содержимого системного dll-файла использую следующий bat-файл Код (Text): @echo off cls set masm64_path=\masm64\ set FileName=user32 if exist %FileName%.inc del %FileName%.inc if exist %FileName%.def del %FileName%.def %masm64_path%bin\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 %masm64_path%bin\link -lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64 Разбор bat-файла предварительная настройка bat-файла Код (Text): ::стираем с экрана cls ::устанавливаем путь к каталогу masm64 set masm64_path=\masm64\ ::имя "препарируемой dll", начнем с user32 set FileName=user32 ::обрабатываем user32.dll и получаем user32.txt файл %masm64_path%bin\dumpbin.exe /EXPORTS %windir%\System32\%FileName%.dll /OUT:%FileName%.txt содержимое user32.txt Код (Text): 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 Код (Text): 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-файлов ― удаляем их. Код (Text): if exist %FileName%.inc del %FileName%.inc if exist %FileName%.def del %FileName%.def создаем файл user32.def, который должен начинаться со строки "EXPORTS" Код (Text): @echo EXPORTS >> %FileName%.def Полезная информация начинается в user32.txt с 16 строки, поэтому skip=16 означает ― пропускаем первые 16 строк в user32.txt при построчном разборе файла user32.txt используем четыре первых слова в строке, которым присвоим имена %%a, %%b, %%c, %%d Код (Text): for /f "skip=16 tokens=1-4" %%a in (%FileName%.txt) do если первый параметр равен "Summary" ― значит обработаны все функции, входящие в dll, мы прекращаем обработку, выходим из файла user32.txt и переходим на метку :exit Код (Text): if "%%a"=="Summary" goto :exit если четвертый параметр в файле user32.txt пустой ― перед нами импорт по ординалам %%a %%b %%c%%d15000002B260 [NONAME]сохраняем первое слово (ординал WinAPI-функции) в строке user32.txt в переменной %%a, обрамляем ее и помещаем в две новых строки в файл user32.inc Код (Text): extern __imp_user32_ordinal1500:qword user32_ordinal1500 TEXTEQU <__imp_user32_ordinal1500> и user32.def Код (Text): user32_ordinal1500=ordinal1500 @1500 NONAME если четвертый параметр непустой ― перед нами импорт по именам функций в очередной строке файла user32.txt %%a%%b %%c %%d15020 000083C0ActivateKeyboardLayoutчетвертое слово в строке (имя WinAPI-функции), сохраняем в переменной %%d, создаем две новых строки в файле user32.inc, предваряем %%d "extern __imp_" строку завершаем ":qword", добавляем "TEXTEQU", "__imp_", экранируем управляющие символы "<" и ">" (^<__imp_%%d^>) чтобы bat-файл воспринимал их, как обычные символы. Код (Text): extern __imp_ActivateKeyboardLayout:qword ActivateKeyboardLayout TEXTEQU <__imp_ActivateKeyboardLayout> и user32.def Код (Text): ActivateKeyboardLayout=__imp_ActivateKeyboardLayout если четвертый параметр равен "(forwarded", значит WinAPI-функция берется из другой dll и мы пропускаем такую строку. %%a%%b%%c%%d165794DefDlgProcA(forwarded to NTDLL.NtdllDialogWndProc_A)из содержимого файлов user32.def и user32.lib создаем файл user32.lib Код (Text): :exit %masm64_path%bin\link -lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64 того же результата можно добиться и строкой Код (Text): %masm64_path%bin\lib /DEF:%FileName%.def /OUT:%FileName%.lib /MACHINE:X64 переносим файл user32.inc в каталог masm64\include, а файл user32.lib в каталог masm64\lib удаляем программный мусор Код (Text): if exist %FileName%.def del %FileName%.def if exist %FileName%.exp del %FileName%.exp if exist %FileName%.txt del %FileName%.txt С удивлением обнаружил, что в kernel32.dll нет ExitProcess, а в user32.dll нет DefWindowProcA, обе функции портируются из ntdll.dll (RtlExitUserProcess и NtdllDefWindowProc_A соответственно) Аналогично user32.dll препарируем kernel32.dll, ntdll.dll, gdi32.dll, comctrl32.dll и далее, по мере необходимости
Сборку создал, запускал пару примеров все вроде компилируется , ваши примеры тоже пробовал компилируются - создаются исполняемые файлы. В общем решил начать изучение с создания своего текстового редактора, сразу встало пару вопросов . Где найти описание хотя бы простенькое функций из комплекта Хатчинсона а так же ваших макросов всего этого там много и понять что для чего не так просто без описания, к примеру вот этот фокус мне не понятен , зачем по 2 макроса но с разными именами - invoke MACRO fname:REQ,args:VARARG procedure_call fname,args ENDM fn MACRO fname:REQ,args:VARARG procedure_call fname,args ENDM function MACRO fname:REQ,args:VARARG procedure_call fname,args EXITM <rax> ENDM rv MACRO fname:REQ,args:VARARG procedure_call fname,args EXITM <rax> ENDM
Dm808, прямой вопрос ― прямой ответ. Идешь на форум masm32 и задаешь вопросы Стиву. Либо он ответит, либо тамошние форумчане. Тебе остается только ответы на твои вопросы перевести на русский язык и вставить в hlp-файл. Всё же просто!
Похоже я надоел со своими вопросами , на Масм форуме вроде нет русскоязычной ветки, мне там по любому скажут я твоя не понимай че приперся сюда, ну да ладно , а еще один малюсенький вопрос можна? мне вот дико не нравится внешний вид 10ки, и перерыл весь интернет в поисках как сделать свой вид окна, с регионами разобрался, хоть какую форму сделать можно, и на основе картинок тоже, но вот одна маленькая загвоздка все это выходит без тени как у нормального окна по современным меркам. Что делал - 1 создал окна овальное = тень пропала , всякие там cs_shadow на окно не работают либо криво работают, плюнул полез в WM_NC.....,думал может просто перерисовать не клиентскую область и все будет нормально, фиг там ,стоит что нибудь намалевать в WM_NCPAINT тень тыц и исчезает,в конце концов где то нашел что с 7ки для окна добавили функций какой то DWM вроде называется, но по русски по этой теме не нашел не чего что могло бы помочь с тенью для окна, и так вопрос , примера даже (но если будет я не против ) не надо, как сделать нормальную тень у окна без бордюров и заголовка в Window 7 - Windows 10?
Dm808, нет, не надоел, спрашивай, только учитывай, что не на все вопросы я могу ответить. Да, на masm32 нет ветки для русскоязычных, но гугл-транслейт в помощь, задавай свои вопросы на английском, а потом с его помощью будешь переводить ответы на свои вопросы, а через какое-то время начинаешь понимать ЧТО спросить и ЧТО ответить, но уже без помощи онлайн-переводчиков. Главное ― начать По поводу окошка с тенью, не обещаю, но попробую помочь
в чем разница компиляторов 64 битного и 32 битного ml64? Один скомпилирован в 64 бита другой в 32. Последний дает возможность компилировать на 32 разрядной системе приложения в 64 разряда.
Здраствуйте. Очень нужна ваша помощь. Только начал изучать Ассемблер и меня возникли некоторые трудности при повторении действий описаных выше, а именно: 1 Что значит заполнить таблицу, собрать все указанные в ней файлы и поместить в папку masm64\bin правильно я понимаю ? 2 При d:\masm64\bin\hiew32 ml64.exe затем Нажми на клавишу F4(mode) → Decode, нету списка тех файлов что у вас . Почему так и как ето исправить. Понимаю что вопросы очень глупые но все же только начал постигать Ассм. Спасибо.
online_777, там по пунктам делается. 1. Установил Microsoft Visual Studio 19.0 ? Да? Нет? 2. Создал каталог, masm64, а в этом каталоге подкаталоги bin, include, lib, sample ? Да? Нет? 3. Из интернета скачал файл hiew32.exe и разместил его в каталоге masm64\bin? Да? Нет?
1. Да 2Да 3.Да 4.Да 5.Да 6.? 7.Да Нажми на клавишу F4(mode) → Decode 8. затем на клавишу F8(header) Что не так делаю ? здесь должны быть файлы из таблицы ?
Наверное, проблема в файле hiew32demo, который взят неизвестно откуда, хотя у тебя должен быть hiew32.exe. Не забудь его распаковать.