· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› файлы inc и lib

Посл.отвђт Сообщенiе


Дата: Ноя 7, 2003 04:07:53

Я начинающий. У меня вопросы:
1. Вот строчки
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

Как я понял файлы inc содержат прототипы API-функций которые необходимы транслятору чтобы он знал что существует такая ПОДПРОГРАММА(или функция???)и какие параметры в каком количестве ей нужны перед вызовом (например будем вызывать "call ExitProcess" (invoke ExitProcess)). Но это при трансляции а на этапе линковки увидев строчку сall ExitProcess линковщик прилинкует подпрограмму с таким же именем ExitProcess (или он её прилинкует когда увидет ExitProcess PROTO :DWORD ???) которая будет осуществлять вызов одноименной API-функции из kernel32.dll (в данном случаи) которая и прервет программу. От куда линковщик возьмет код этой подпрограммы (я так понимаю из kernel32.lib...если не то объясните зачем нужны libы) и в какую часть кода он ее присобачит и можно ли как-то взглянуть на этот код???


2 Вот еще вопрос. В рассылки "Ассемблер? Это просто! Учимся программировать" файлы inc пишутся иначе например в место ExitProcess PROTO :DWORD пишется
extrn __imp__ExitProcess@4:dword
ExitProcess equ __imp__ExitProcess@4
Но когда я заменяю эти две сточки на ExitProcess PROTO :DWORD при трансляции ассемблер выдает ошибку "language type must be specified" и не создает OBJ фаил.
Почему так происходит ? И как исправить ?


[u][/u][/i][i][i][/i][/b][b][b][/b][back=][back=][/back][img][/img]


Дата: Ноя 7, 2003 04:31:09

Но это при трансляции а на этапе линковки увидев строчку сall ExitProcess линковщик прилинкует подпрограмму с таким же именем ExitProcess (или он её прилинкует когда увидет ExitProcess PROTO :DWORD ???) которая будет осуществлять вызов одноименной API-функции из kernel32.dll (в данном случаи) которая и прервет программу. От куда линковщик возьмет код этой подпрограммы (я так понимаю из kernel32.lib...
Ну вот, начали за здравие, как говорится. API всё-таки лучше называть функциями, а не подпрограммами. Код API-функций НЕ копируется в компилируемую программу, иначе все экзешники имели бы чрезмерно большой размер. Вместо этого генерируется call/jmp на адрес используемой API, а т.к. адрес не всегда один и тотже, то необходимо разрешать его во время загрузки программы (в рантайме, короче). Всё это дело напрямую связано с IAT, загрузчиком и даже линкером. Рекомендую почитать про этих товарищей.

2 Вот еще вопрос.
Как разберётесь с первым вопросом, так сразу поймёте принцип "прямых" переходов.


Дата: Ноя 7, 2003 04:54:02

Goodwen

Кое что по второму вопросу можно почерпнуть здесь:

Записки Дzenствующего


Дата: Ноя 7, 2003 19:31:46

кое-что про второй вопрос.... асм от тебя хочет узнать, как ему передавать параметры функции, в стеке или еще как.
Так что смело пиши в хидере программы
.model что-ты-там-используешь, stdcall
Дальше можешь использовать прототипы.


Дата: Ноя 8, 2003 07:45:16

Quantum
1


Дата: Ноя 8, 2003 07:47:16

Quantum
ой...Код API-функций НЕ копируется в компилируемую программу"
Я и не говорю что код API функции копируется в программу, я сказал что копируется подпрограмма которая будет осуществлять вызов одноименной API-функции из kernel32.dll а код этой подпрограммы на скока я понимаю находится в kernel32.lIb Если я не прав напиши... А мой вопрос насчет "ПОДПРОГРАММА(или функция???)" я имел ввиду что мы описываем например строчкой ExitProcess PROTO :DWORD функцию из kernel32.dll или подпрограмму из kernel32.lib ?
…Спасиб за ответ - жду следующий :).
P.S.
"Рекомендую почитать про этих товарищей." Обязательно ! если есть оставь ссылки


Дата: Ноя 8, 2003 07:49:12

use_32Не помогло


Дата: Ноя 8, 2003 14:05:39 · Поправил: use_32

Goodwen, попробуй так:
                .386p
                .model  flat, stdcall

		include	../win32inc/windows.inc
		includelib	../win32lib/kernel32.lib
		include	../win32inc/kernel32.inc
                че-там-тебе-еще-надо
		option casemap: none

а ты чем компилишь?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076