Здравствуйте уважаемые! Захотелось переписать маленькую програмку из Си в Фасм. Код: Код (Text): #include <windows.h> typedef bool( *DllProc )( HINSTANCE ); int main() { HINSTANCE hDll; DllProc dpSetUpHook; char szDllPath[] = "C:\\hook.dll"; MSG msg; hDll = LoadLibrary( szDllPath ); dpSetUpHook = ( DllProc ) GetProcAddress( hDll,"SetUpHook" ); ( dpSetUpHook )( hDll ); while ( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return 0; } Попробывал переписать, получилось: Код (Text): section '.code' code readable executable Start: invoke LoadLibrary,szPath invoke GetProcAddress,eax,szFuncName call eax @@: invoke GetMessage,msg,0,0,0 test eax,eax jz @f invoke TranslateMessage,msg invoke DispatchMessage,msg jmp @b @@: invoke ExitProcess,0 section '.data' data readable writeable szPath db 'C:\hook.dll',0 szFuncName db 'SetHook',0 msg MSG На GetMessage отладчик останавливается, следовательно неправильно передаю msg. Вопрос: как правильно написать?
Судя по всему, ф-ия dpSetUpHook принимает параметер hDll Код (Text): ( dpSetUpHook )( hDll ); а здесь: Код (Text): invoke GetProcAddress,eax,szFuncName call eax параметер исчез. +вероятно надо почистить стек, если вызов 'cdecl'.
И вообще, странный разговор..."сам не знаю" В отладчике не посмотреть чтоле, какие параметры куда передаются?
G0L1a7h Может программа останавливается на GetMessage, потому что она ээ... ждёт получения сообщения? Можешь PostThreadMessage для своего потока из другой программы и посмотреть результат. 2FED Всё верно, fasm передаёт указатель.
Эмм.. да не дурак я.. там где-то внутри функции Access Voilation.. хм, я где-то видел пример если надо передать указатель , переменную заключают в [] , вот это меня и сбило..
Ты, помоему, все на свете перепутал )) Извини за язвительный тон, не в обиду. Поучи синтаксис фасма, прежде чем на нем писать. Поучи синтаксис Си, прежде чем с него переписывать. Может, с отладчиком, поучиться работать... Почему отладчик останавливается именно на этой инструкции? Возникает исключение или что?