Форум: "Потрепаться";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
ВнизНужна помощь по ассемблеру. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.009 c