патроны.Использовать символические имена без пакета masm32
В настоящее время я изучаю аркановское искусство языка ассемблера.
Я написал программу, которая отображает диалоговое окно (на окнах 8.1). Я проверил ссылку msdn и выяснил, как изменить оптику и поведение указанного диалогового окна. Я также узнал, где хранится возвращаемое значение и как его читать. Поэтому мой вопрос не в том, что «помогите мне, я застрял».
Посмотрите на эту маленькую программу в диалоговом окне:
.386
.model flat, stdcall
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib"
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"
MessageBoxA PROTO :DWord, :DWord, :DWord, :DWord
ExitProcess PROTO :DWord
.data
Caption db "Masm shizzle",0
Text db "Click OK my friend",0
.code
start:
push 11h
push OFFSET Caption
push OFFSET Text
push 0
call MessageBoxA
push 0
call ExitProcess
end start
Это работает как шарм, и я понял, как нужно заказывать в стек параметры.
Затем я попытался улучшить код и сделать его более удобным для чтения и чище, поэтому я сломал раздел .Code вниз:
.code
start:
invoke MessageBoxA, 0, addr Text, addr Caption, 11h
invoke ExitProcess, 0
end start
А потом я наткнулся на веб-страницу, объявленную вы могли бы сделать код еще более удобным для чтения используя символические имена с помощью «windows.inc». Он сказал, что мне даже не нужно писать functionA (ANSI).
Поэтому вызов Invoke будет выглядеть следующим образом:
invoke Messagebox, NULL, addr Text, addr Caption, MB_ICONINFORMATION
Проблема заключается в том, что эти символические имена из пакета masm32, более конкретно от «windows.inc».
Хотя я вообще не против использования masm32, мне бы хотелось знать, есть ли эквивалентный файл на «стандартном» хосте Windows с установленной только Visual Studio, которую я могу использовать.
Чтобы быть более конкретным, если бы я захотел запустить (или даже скомпилировать) этот код на удаленной машине, я не мог предположить, что на хосте присутствует установка masm32, поэтому включенные объекты будут указывать в никуда. (как я понимаю, или это упаковано в исполняемый файл, если я прекомпилирована его?)
Если это не представляется возможным без masm32, то я думаю, мне нужно написать символическую библиотеку имени ....
Параметр 'windows.inc' файл необходимо только присутствовать, когда код собран, не тогда, когда он запускается. И если конечный пользователь хочет перекомпилировать код, им все равно понадобится MASM32. (Или совместимый сторонний ассемблер, но такой ассемблер должен предоставить свою собственную версию включенных файлов.) Поэтому я не думаю, что у вас есть проблема. –
Спасибо, что принесли некоторую ясность в это. Поэтому я думаю, что просто перекомпилирую все версии, которые мне нужны. Ради завершения, есть ли эквивалент Microsoft для этого файла? – clockw0rk
На самом деле я не понял, что MASM32 является сторонним пакетом. Я не знаю, есть ли эквивалент Microsoft, по-видимому, нет. В зависимости от лицензирования вы можете просто скопировать соответствующий контент прямо в исходный код. –