Уроки Iczelion'а

Формат библиотек импорта MASM'а


MASM и Visual C++ могут использовать одинаковые библиотеки импорта, что

очень удобно. Микрософтовские библиотеки импорта используют разновидность

формата COFF, которое отлично от формата OMF, используемого TASM'ом. По

этой причине TASM не может использовать MASM'овские библиотеки импорта и

наоборот. Я не буду углубляться в детали строения этих библиотек.

Достаточно сказать, что каждая библиотека импорта Microsoft'а содержит

информацию о функциях из определенных DLL. Эта информация включает в себя

имена функций и общий размер параметров, передаваемых функциям. Если вы

пробежитесь по kernel32.lib с помощью hex-редактора, вы найдете найдете в

ней следующее:

_ExitProcess@4

_CreateProcessA@40

Имена функций имеют префикс '-'. Число, следующее за @ - это общий

размер параметров этой функции в байтах. ExitProcess принимает только один

параметр dword, поэтому это число равно 4. Почему включается информация о

размере параметров? Эта информация используется MASM'ом, чтобы проверить

правильность переданных функции параметров, когда та вызывается с помощью

ключевого слова 'invoke'. Если вы просто затолкаете параметры в стек

инструкцией 'рush' и запустите функцию инструкцией 'call', MASM не будет

проверять правильность параметров. Это преимущество делает невозможным

создать библиотеки импорта MASM из DLL, потому что DLL не содержит точной

информации о размере паарметров, передаваемых функции.



Содержание раздела