Решил я не ограничиваться MASM и попробовать знаменитый FASM. Но возникли, даже не проблемы, не понятки с ним. Читаю уроки Iczelion'а переписанные для fasm. 1. Зачем обязательно делать секцию импорта. В примерах от архива самого fasm тоже самое. Везде создаётся секция. В masm не делал такого. Этого ж лишнее только писать. 2. Почему в уроке 2 используется win32ax.inc, а уже в 3 win32a.inc, в то время как win32ax.inc включает в себя и win32a.inc. Если же подключить в 3 уроке win32ax.inc, то программа не комиплируется
Вовсе не обязательно если импорт не используется Вручную, так же, вовсе не обязательно создавать импорт, указываюя каждую функцию, можно например так: Код (Text): section '.idata' import data readable library kernel32,'kernel32.dll',\ user32, 'user32.dll',\ gdi32, 'gdi32.dll' ,\ comctl32,'comctl32.dll',\ comdlg32,'comdlg32.dll',\ wsock32,'ws2_32.dll',\ msvcrt,'msvcrt.dll' include '%fasminc%\apia\kernel32.inc' include '%fasminc%\apia\user32.inc' include '%fasminc%\apia\comctl32.inc' include '%fasminc%\apia\comdlg32.inc' include '%fasminc%\apia\gdi32.inc' include '%fasminc%\apia\wsock32.inc' include '%fasminc%\msvcrt.inc' В этом случае сам Fasm оставит только те API, которые используются.
Rito Не понятно, что тебя не устраивает Если ты не хочешь создавать таблицу импорта "ручками", то юзай win32ax и секция импорта будет создана автоматом директивой .end start Если же тебя не устраивает, что под импорт создается отдельная секция, то можно или подправить win32ax (закоментировать в макросе .end строку section и заключить весь импорт в data import .. end data) или не юзать .end и создавать таблицу "ручками" в конце секции кода (если "в лом" каждый раз копипастить всю таблицу, можно создать свой inc и подключать его одной строчкой)
я когда-то их смотрел - мне показалось, что переписали их не очень удачно. да и не очень-то они и нужны, если пройдены под масмом. при переходе с масма на фасм нужно знать: 1.основные отличия синтаксиса - например, адресация при обращении к памяти, int3 вместо int 3, и т.п. мелочи. 2.особенности высокоуровневых операторов, аналогичных тем, что в масме, но реализованных через макросы: - в масме: invoke, в фасме: invoke, cinvoke, stdcall и ccall (т.к. нет "PROTO" - тип вызова задается явно; наиболее частый облом - wsprintf нужно вызывать с cinvoke) 3.разница между win32*.inc - win32a.inc - базовый, win32ax.inc - расширенная поддержка высокоуровневых слов, аналогичных масму (но все равно имеющих отличие в синтаксисе) типа .if и т.п., win32axp.inc - то же, что и win32ax.inc, но проверяющие количество параметров для invoke - иногда удобно, иногда наоборот. 4.секция импорта: можно написать ручками, можно использовать "тотальный" импорт (который не покрывает все библиотеки), можно использовать автоматический сканер импорта от Vortex-а, который сканирует исходник и формирует таблицу иморта сам (не лишен недостатков, но они обходятся). 5.ресурсы: можно использовать rc-файлы, компилировать в res и из них создавать секцию ресурсов, можно писать ручками, можно использовать смешанный способ: писать ручками все, кроме диалогов, а диалоги конвертировать из rc в формат фасма и инклидить. некоторые вещи фасм не позволяет, например, идентификаторы в ресурсах, написанных ручками, могут быть только числовыми (по-моему). при использовании кириллицы в ресурсах фасма нужно не забывать подключать "encoding\win1251.inc". 6.многое из того, что есть нудным и рутинным, можно автоматизировать, используя, например, WinAsm Studio с надстройкой FASM, которое можно скачать здесь с русской справкой.
Rito Дело в том, что масм на выходе создает не exe, а obj. А затем этот obj линкуется линкером вместе с либами. Таблицу импорта, как и заголовок, строит линкер а не масм. С фасмом дело обстоит не так. Ему по барабану что создавать, он выведет в файл то, что ты ему скажешь. Иными словами программа на фасме выглядит вот так: FORMAT PE CONSOLE - хочу чтобы файл начинался с mz - pe заголовока Entry Main - Хочу чтобы точкой входа была Main proc Main - Тута моя программа ret endp SECTION '.idata' import data readable writeable - Хочу чтобы все это заканчивалось таблицей импорта Фасму по барабану что пихать в файл. Что ты ему сказал то он и запихнул. Просто в данном случае последовательность запихнутых байт будет соответствовать exe файлу. Отличия от Масма заключаются только в этом. Ты можешь не создавать exe файлы напрямую фасмом, а создавать obj файлы как масм, в мануале фасма описано как это делать. А затем кормить эти файлы какому-нибудь линкеру. Так тебе не придется создавать таблицу импорта вручную за тебя сделает это линкер.
В дополнение к этим словам сайт www.256b.com там, на фасме и других интструментах, создают демки, но занимательней всего файлы различных форматов, например фрактал в BMP можно сгенерировать на фасме
2FED http://www.wasm.ru/baixado.php?mode=doc&id=133 Еще также была дока S.T.A.S или переводил или сам писал, сайт его не помню