Увожаемые профессионалы! Подскажите как можно вызвать функцию из dll? только без использованием GetProcAddress! Есть какой нибудь альтернативный вариант?
Лезешь в импорт соответствующей dll и ищешь там адреса. А можно просто прилинковать к своей проге соответствующую библиотеку и никакого GetProcAddress не нужно: загрузчик сам тебе адрес предоставит. Пардон, естественно в экспорте, как заметил The Svin
смотри в разделе исходников Kernel by Yoda там показано как получать адреса на примере той же GetProcAddress. Подставишь вместо неё свою функцию.
и ещё вопросик вот к примеру в дельфи можно так 1 hlib := loadlibrarya(lib); addr := getprocaddress(hlib, 'createfile'); где addr адрес нашей функции 2 а можно и так createfile(filename: pchar; ....): dword; external 'kernel32.dll'; есть что нибудь подобное на асме?
Код (Text): .data hLib dd 0 cfAddr dd 0 szLibName 'kernel32,dll', 0 szFuncName 'CreateFile', 0 .code invoke LoadLibrary, addr szLibName mov hLib, eax invoke GetProcAddress, hLib, addr szFuncName mov cfAddr, eax а если нужно объявление функции, то CreateFile PROTO WORD,WORD,WORD,WORD,WORD, WORD,WORD
cresta мне инвоки и либы нафуй не нужны! просто спросил есть ли более простой способ чем ты посоветовал
проще может быть только вызывать CreateFile по стандартному адресу тока будет работать у одного тебя на компике
3DManiac как с переносом сделать тебе уже ответили находишь адреса нужных тебе библиотек а там уж по импорту ищешь нужные тебе функции
У меня был пример, но, как сказал Quantum, там надо ставить align, у меня пока не было времени. Короче, смотри fasm'овский PEDEMO в examples, и там перед каждой строкой типа: _ExitProcess dw 0 db 'ExitProcess',0 поставь align 2, в макросах используется та же самая структура, только всё исправлено, а в примерах автор fasm'а так и не исправил. Что-то ещё вроде было... не помню. Это пример заполнения таблицы импорта вручную без макросов и библиотек, и я им постоянно пользовался, но сейчас вынужден не программировать какое-то время.
Это пример статического подключения, кстати. А по получению адресов в kernel32.dll есть статья на wasm'е "Поиск адресов api в 95-XP". В общем-то можно переделать под любую dll, если процесс вычисления базы заменить. Если ты можешь использовать GetModuleHandle проблем не будет, иначе есть ещё какие-то способы получения информации о библиотеках, использованных процессом, видел в одной статье Ms-Rem'а по обходу файрволла.
Мужики, кончайте метаться по 4 темам Знатоки масма, ответьте автору в топик Как можно вызвать функцию из dll? на простой вопрос: можно ли в масме обявить статический импорт иначе чем includelib <libname> А беспощадному даосу пора бы проснуться и навести порядок в этом бардачке