[C++] Wrapper DLL, własny log danych
Ostatnio zmodyfikowano 2020-01-10 21:20
luki743 Temat założony przez niniejszego użytkownika |
[C++] Wrapper DLL, własny log danych » 2020-01-09 15:26:24 Witam Mam pewną aplikacje która łączy się z biblioteką DLL i wykonuje operacje. Postanowiłem zrobić "wrappera" który udaje tą bibliotekę i łączy się z oryginalną. W celu prześledzenia jej działania. Projekt wygląda tak: wrapper.cpp: HINSTANCE mHinst = 0, mHinstDLL = 0; extern "C" UINT_PTR mProcs[ 14 ] = { 0 };
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { mHinst = hinstDLL; if( fdwReason == DLL_PROCESS_ATTACH ) { mHinstDLL = LoadLibrary( "ORIGINAL.dll" ); if( !mHinstDLL ) return( FALSE ); mProcs[ 0 ] =( UINT_PTR ) GetProcAddress( mHinstDLL, "Open" ); } else if( fdwReason == DLL_PROCESS_DETACH ) { FreeLibrary( mHinstDLL ); } return( TRUE ); }
extern "C" { void Open_wrapper(); void testLog( string logMsg ) { string filePath = "log.txt"; ofstream ofs( filePath.c_str(), std::ios_base::out | std::ios_base::app ); ofs << '\t' << logMsg << '\n'; ofs.close(); } void Open() { Open_wrapper(); } }
wrapper.def: LIBRARY wrapper.dll EXPORTS Open = Open @ 1
wrapper.asm: .code extern mProcs: QWORD Open_wrapper proc jmp mProcs[ 0 * 8 ] Open_wrapper endp
Biblioteka działa ok. Aplikacja wykonuje poprawnie czynności. Jednak gdy dodam do metody "Open" linijkę: testLog( "Open" ); która zapisuje do pliku informacje - aplikacja przestaje działać. - Projekt kompiluje się poprawnie - Po załadowaniu wrapper.DLL do oryginalnego programu nie wywala błędu - Plik log.txt zostaje utworzony - Aplikacja która łączy się z moim wrapperem wywala swój wewnętrzny błąd Co to może być? Tak jakbym blokował bibliotekę najprostszym kodem. Bez niego wszystko działa ok |
|
pekfos |
» 2020-01-09 17:29:53 Sprawdzałeś zgodność ABI oryginalnego Open() z nowym? Open_wrapper() musi mieć taką samą deklarację, jak Open(), wliczając w to konwencję wywołania. Zobacz pod debuggerem co dokładnie się dzieje. |
|
luki743 Temat założony przez niniejszego użytkownika |
» 2020-01-10 20:36:12 da się debugować DLL nie mając źródła projektu aplikacji w której jest wykorzystywana? |
|
pekfos |
» 2020-01-10 21:20:17 Kod to tylko ułatwienie do debugowania, nie warunek konieczny. Na pewno będzie prościej, jakby udało się odtworzyć problem na aplikacji, do której masz źródła. W tym celu, lub jeśli się nie uda, możesz użyć nawet zwykłego GDB. Tematyka RE jest niezgodna z regulaminem, więc w większe szczegóły nie będę wchodzić. |
|
« 1 » |