Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rysowanie tekstu w / Engine
#1
Rozumiem, że jest to funkcja, którą możemy wykorzystać do rysowania tekstu na ekranie w COD4 v1.5:       Kod:   push 0 push 1.0; ScaleY push 1.0; ScaleX push Y push X push Nacisk czcionki iTextLen push String mov ecx, Kolor; RGBA (0 - 1.0) mov eax, 0x005CDB30 zadzwoń eax   Przeglądanie samouczka Quicktime dotyczącego pisania tekstu na konsolę wygląda dość prosto. Jedyną rzeczą jest to, że jego tutorial miał jeden argument. To był sam tekst, który miał zostać wydrukowany. Łatwy.   Czy ktokolwiek zna prawidłowe wartości dla argumentów w tej funkcji? Co się dzieje?   naciśnij Czcionka lub naciśnij iTextLen   ** czy ta funkcja nie otrzyma len z ciągu Push? Dlaczego musimy określić? **
Reply
#2
Dunno o długości, widziałem go jako 40 dla 10-bajtowego łańcucha, a następnie dla wszystkich pozycji menu jest ustawiony na 7FFFFFFF, co jest prawdopodobnie pewną dziwną wartością ujemną. Po prostu baw się z rozmiarem, dopóki go nie otrzymasz. Musisz wypracować sposób, aby rozwiązać wskaźniki do tych struktur tekstowych, ponieważ jestem pewien, że są one dynamicznie ładowane. EDIT: Oh, myślę, że struktury czcionek zawsze ładują się do 00F8D3C4, ale to różne zamówienia, i możliwe, że nawet nie ładują się w ogóle. Musisz więc sprawdzić pierwszy dword każdej struktury, aż dopasuje się do nazwy żądanej czcionki, lub do zera (wskazuje koniec tablicy struktur czcionek).
Reply
#3
Myślę, że znalazłem mój problem. Musiałem poczekać, aż znalazłem się na mapie przed wywołaniem funkcji DrawString (); Czy możesz mi powiedzieć, gdzie nazwałeś DrawString, Strife?
Reply
#4
Zacytować: Originally Posted by silverfish Myślę, że znalazłem mój problem. Musiałem poczekać, aż znalazłem się na mapie przed wywołaniem funkcji DrawString (); Czy możesz mi powiedzieć, gdzie nazwałeś DrawString, Strife? Wzywam go w R_RenderScene (). Adres tej funkcji to 0x5d1f30.
Reply
#5
Zacytować: Napisał pierwotnie Strife Wzywam go w R_RenderScene (). Adres tej funkcji to 0x5d1f30. Hmmmm ... czy mówisz objazdowy R_RenderScene, czy robisz DrawString () w tej oderwanej funkcji? przykład: Kod: void (* origScene) (); void myScene () {void * pFont = GetFont ("fonts / smalldevfont", 0); engText -> DrawString (100, 300, pFont, & engRed, "Mam wiele ciasteczek:% i", ciasteczka); origScene (); } ... bool WINAPI DllMain (HMODULE hDll, DWORD dwReason, PVOID pvReserved) {jeśli (dwReason == DLL_PROCESS_ATTACH) {DetourFunction ((unsigned char *) 0x005D1F30, (unsigned char *) myScene); __asm mov [origScene], eax return true; } else jeśli (dwReason == DLL_PROCESS_DETACH) {} zwraca false; } Czy jestem daleko?
Reply
#6
Zacytować: Originally Posted by silverfish DetourFunction ((unsigned char *) 0x005D1F30, (unsigned char *) myScene); _asm mov [origScene], eax Myślę, że brakowało ci koncepcji funkcji detourowej, musisz skonfigurować prototyp typedef ... Kod: typedef void (__cdecl * tRenderScene) (void); tRenderScene oRenderScene; następnie, gdy potrzebujesz wywołać oryginalne użycie oRenderScene, a następnie zadeklaruj oRenderScene w bibliotece DLL_PROCESS_ATTACH w następujący sposób: Kod: oRenderScene = (tRenderScene) DetourFunction ((PBYTE) 0xSomeOffset, (PBYTE) YourHookedRenderScene); Mam nadzieję, że pomoże, jeśli w ogóle ....
Reply
#7
robi, dzięki! Kod: typedef int (__cdecl * _RenderLoop) (int, int, int, char); _RenderLoop RenderLoop_; int __cdecl RenderLoop (int, int, int, char); moja funkcja: Kod: int __cdecl RenderLoop (int iArg_0, int iArg_4, int iArg_8, char iArg_12) {int b = RenderLoop_ (iArg_0, iArg_4, iArg_8, iArg_12); // return codez b; } hak: Kod: RenderLoop_ = (_RenderLoop) DetourFunction ((PBYTE) 0x005D1F30, (PBYTE) RenderLoop); Rozbija się na pulpicie tuż przed wejściem do gry, więc myślę, że jest blisko. Nie wiem, czy argumenty są poprawne.
Reply
#8
Jestem w 99% pewien, że R_RenderScene jest szybką zaprawą.
Reply
#9
Zacytować: Napisał SpawnZ Jestem w 99% pewien, że R_RenderScene jest szybką zaprawą. Jest, ale nie zadzieję z przekazanym mu argumentem (refdef). Oto ona: Kod: typedef void (__cdecl * tRenderScene) (); tRenderScene oRenderScene; void __cdecl hkRenderScene () {__asm pushad // Do stuff __asm popad oRenderScene (); } Void HookRenderScene () {oRenderScene = (tRenderScene) DetourFunction ((PBYTE) 0x5d1f30, (PBYTE) hkRenderScene); }
Reply
#10
Zacytować: Napisał pierwotnie Strife Jest, ale nie zadzieję z przekazanym mu argumentem (refdef). Oto ona: Kod: typedef void (__cdecl * tRenderScene) (); tRenderScene oRenderScene; void __cdecl hkRenderScene () {__asm pushad // Do stuff __asm popad oRenderScene (); } Void HookRenderScene () {oRenderScene = (tRenderScene) DetourFunction ((PBYTE) 0x5d1f30, (PBYTE) hkRenderScene); } To nie działa.
Reply




Users browsing this thread: 1 Guest(s)