Подскажите как получить модуль, например, kernel32.dll? szDllName db 'kernel32',0 Invoke GetModuleHandle,offset szDllName Ничего не возвращает .dll тоже подставлял. Подскажите плиз
Lex2029 Не может быть. если не возвращает что необходимо, то надо смотреть, что за ошибка(GetLastError), потом лезть в msdn и смотреть, что эта ошибка означает.
Lex2029 А целиком пример можешь привести? По идее надо GetModuleHandleA. Ещё интересно что GetLastError врзвращает?
Lex2029 The specified module could not be found. Может ты юникод версию юзаешь? GetModuleHandleW GetModuleHandle Попробуй явно GetModuleHandleA.
нет. Целый пример - это фрагмент исходника, который ты компилируешь. Переписывая две строчки на форум ты вполне мог исправить ошибку в коде Какие данные объявлены перед szDllName и как используются?
Код (Text): .data szDllName db 'kernel32.dll',0 .code Start: Invoke GetModuleHandleA,offset szDllName .if eax==0 Invoke GetLastError Invoke IntToStr,eax Invoke MessageBox,0,eax,0,0 .endif Invoke MessageBox,0,0,0,0 Invoke ExitProcess,0 end Start
Блин!!! Я ничего не понимаю (( Запустил через отладчик и все заработало!! Теперь и без отладчика! Я исходник даже не открывал! что за тупость...
Рекомендую посмотреть в сторону ф-ции SystemErrorMessage(так вроде) смысл ее вернуть текст ошибки, а уж его прочитать то не сложно
Да сейчас просто не дома, нет МСДНа... Кстати, у меня теперь не получается таким способом получить свою длл, лежит в каталоге с программой. В чем дело может быть?
Lex2029 Ну найди его сам, этот адрес загрузки, за одно PE-формат изучишь, что очень будет полезно на будущее ) У мну тут мысль закралась, а ты хоть одну ф-цию из dll вызвал?
А как связана GetModuleHandle и формат исполняемых файлов? А на счет второго вопроса, я не понял В чем вопрос?
EvilsInterrupt A ExitProcess? Lex2029 GetModuleHandle возвращает адрес, по которому модуль загружен(или может быть загружен?!) в память процесса. С форматом PE это связанно как ImageBase.
twgt ГЫ ))) Отжег Lex2029 Дело в том чтобы хэндл был получен,ну чтобы либа была загружена, это можно сделать путем вызова ф-ции в коде и подрубив нужные вещи и тогда линкер построит файл так чтобы в секции импорта была запись о том какая dll и ф-ция из нее нужны. Или же можешь заюзать к примеру LoadLibrary и загрузить динамически т.е. по мере надобности к примеру так делают архитектуры на плагинах, типа взять и подрубить плагин twgt Если ты поместишь вызов ф-ции какой-либо за вызов ExitProcess, то линкер все равно вставит запись, что ф-ция нужна и следовательно нужна и ее dll тоже Это отчетливо видно чуть ли не в первых примерах от Iczelion`a