Pracuję nad natywnymi połączeniami dla maszyny wirtualnej, a jedną z funkcji jest możliwość wyszukiwania standardowych funkcji libc według nazwy w czasie wykonywania. W przypadku okien staje się to trochę kłopotliwe, ponieważ potrzebuję uzyskać uchwyt do modułu msvcrt, który jest aktualnie załadowany w procesie. Zwykle jest to msvcrt.dll, ale mogą to być również inne warianty (msvcr100.dll, itp.) I wywołanie funkcji GetModuleHandle ("msvcrt") może się nie powieść, jeśli używany jest wariant o innej nazwie.Jak zdobyć Module HANDLE od func ptr w Win32?
Co chciałbym móc zrobić to odwrotne wyszukiwanie, wziąć wskaźnik funkcji z libc (który mam w obfitości) i uzyskać uchwyt do modułu, który je zapewnia. Zasadniczo coś takiego:
HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
void *vfunc = GetProcAddress(hlibc);
Czy istnieje coś takiego w Win32 API, bez schodząc do ręcznego odległości uchwytów procesowych i tabel symboli? I odwrotnie, jeśli mam zbyt duży problem, czy istnieje łatwiejszy sposób sprawdzenia funkcji libc po nazwie na win32?
Jak to dokładnie pomaga? –
Czego mi brakuje? –
Jest to dobrze znany skrót do znalezienia uchwytu modułu z adresu kodu. Moduł obsługuje daty od 16-bitowych wersji systemu Windows, w 32-bitowych i 64-bitowych wersjach systemu Windows uchwyt modułu jest po prostu podstawowym adresem alokacji pamięci. Nigdy nie widziałem, aby to się nie udało i używaj tej samej sztuczki w moim kodzie. –