Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.14;
Скачать: CL | DM;

Вниз

Нужна помощь по ассемблеру.   Найти похожие ветки 

 
ASM   (2003-03-25 17:31) [0]

Есть exe-фаайл. Он импортирует функцию, например GetVersion из kernel32.dll. Выглядит это примерно так:

call GetVersion ;KERNEL32.dll

или:

call d,[0010040E4]

Как по имени функции GetVersion программно узнать адрес 0010040E4? Будет ли это справедливо для разных операционных систем? Если можно, пожалуйста, поподробнее.

Заранее спасибо.


 
NetBreaker666 ©   (2003-03-26 12:52) [1]

Этот вопрос мучал меня год назад, но ответ я возможно забыл:(

По-моему, когда ты импортируешь функцию, ты указываешь в какой переменной хрантиь ее адрес.

call [...] - ты вызываешь функцию, адрес которой лежит по
/^^^\
вот этому адресу.

Так что эта цифра на каждый запуск программы - постоянна, но то, что лежит по этому адресу - меняется, IMHO.


 
Mystic ©   (2003-03-26 13:59) [2]

Статическая линковка DLL происходит так (грубо): в образе EXE-Файла указывается, по такому-то адресу надо проставить адрес точки входа GetVersion из библиотеки kernel32.dll. При загрузке EXE-Файла загружаются все статически подключаемые DLL и инициализируются их точки входа.

Программно обычно (но необязательно) адреса инициализации являются частью команды JMP xxxxxxxx. Вызов DLL из EXE-файла осуществляется при помощи команды CALL, которая идет на этот JMP.



Страницы: 1 вся ветка

Текущий архив: 2003.04.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-44014
gal
2003-03-24 13:59
2003.04.14
БД


1-44129
Йцукен
2003-03-27 09:23
2003.04.14
Проблема с Вордом.


1-44118
апельсин==
2003-04-03 08:47
2003.04.14
работа с РАР.ЕХЕ


1-44089
Serj
2003-04-02 16:34
2003.04.14
Передача обраблтки сообщения от компонента


1-44186
Yuraz
2003-04-01 09:48
2003.04.14
Технология написания ScreenSaver