Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
odczytaj wieloliniowy wskaźnik łańcucha / tekstu
#1
Cześć im próbuje odczytać ciąg wskaźnika wielu nie wydaje się, aby to działało zawiesza mój program, gdy go wołam           Kod:   char * CheckMenuBase = (char *) ((DWORD) GetModuleHandleA ("some.dll") + 0x0002666C); char * CheckMenuOffset1 = (char *) (* CheckMenuBase + 0x24); char * CheckMenuOffset2 = (char *) (* CheckMenuOffset1 + 0x18); char * CheckMenuOffset3 = (char *) (* CheckMenuOffset2 + 0x18); char * CheckMenuOffset4 = (char *) (* CheckMenuOffset3 + 0x14); char * CheckMenuOffset5 = (char *) (* CheckMenuOffset4 + 0x2C);     Kod:   char * CheckMenuBase = (char *) ((DWORD) GetModuleHandleA ("some.dll") + 0x0002666C); char * CheckMenuOffset1 = (char *) (* CheckMenuBase + 0x2C); char * CheckMenuOffset2 = (char *) (* CheckMenuOffset1 + 0x14); char * CheckMenuOffset3 = (char *) (* CheckMenuOffset2 + 0x18); char * CheckMenuOffset4 = (char *) (* CheckMenuOffset3 + 0x18); char * CheckMenuOffset5 = (char *) (* CheckMenuOffset4 + 0x24);   próbuję napisać * CheckMenuOffset5 do dziennika, który się zawiesza. i tak, adresy są prawidłowe
Reply
#2
to dlatego, że próbujesz odczytać z null ptr, bez uprzedniego sprawdzenia. musisz użyć dword do adresów Kod: DWORD MenuBase = (DWORD) GetModuleHandleA ("some.dll"); DWORD MenuBasePtr = MenuBase + 0x2666C; // teraz baza menu przytrzymaj bazę ptr DWORD CheckMenu1 = * (DWORD *) (MenuBasePtr); DWORD CheckMenu2 = * (DWORD *) (CheckMenu1 + 0x2C); DWORD CheckMenu3 = * (DWORD *) (CheckMenu2 + 0x14); DWORD CheckMenu4 = * (DWORD *) (CheckMenu3 + 0x18); DWORD CheckMenu5 = * (DWORD *) (CheckMenu4 + 0x18); DWORD CheckMenu6 = * (DWORD *) (CheckMenu5 + 0x24); kod napisany w około 5 minut, może zawierać błędy, musisz uwzględnić sprawdzanie null ptrs, CheckMenu6 utrzyma twój końcowy adres. możesz użyć! IsBadReadPtr i! = NULL, aby sprawdzić wskaźniki użyj tego tak: Kod: AddLog ("Mój tekst:% s", CheckMenu);
Reply
#3
ok dzięki wielkie. więc muszę przekonwertować CheckMenu6 na ciąg znaków? jako jego powracające liczby teraz jeśli czytam go za pomocą (char) CheckMenu6 po prostu pokazuje pierwszą literę, jak mogę to wszystko pokazać?
Reply
#4
Zwęglać* Może najpierw chcesz przeczytać o absolutnych podstawach? Pierwsze kroki z c ++ i tak ...
Reply
#5
co masz na myśli, próbowałem char
Reply
#6
Tak. Podstawy. Nie wpisałem tylko char ...
Reply
#7
tak, próbowałem char * po prostu prosiłem o pomoc Wiem, że jest to coś, czego im brakuje
Reply
#8
Zacytować: Napisał pierwotnie poohpooh ok dzięki wielkie. więc muszę przekonwertować CheckMenu6 na ciąg znaków? jako jego powracające liczby teraz jeśli czytam go za pomocą (char) CheckMenu6 po prostu pokazuje pierwszą literę, jak mogę to wszystko pokazać? Jeśli typujesz go w char i drukujesz za pomocą printf, otrzymasz tylko 1 znak Jeśli typujesz go do wskaźnika znaków, powinien on wydrukować wszystko do momentu nullbajty w ciągu znaków
Reply
#9
char * finalstring = (char *) (CheckMenu5 + 0x24);
Reply
#10
dzięki chłopaki Shakai, który wydawał się rozbić moją grę ale skończyło się na tym, że działało char * CheckMenu6 = (char *) (CheckMenu5 + 0x24);
Reply




Users browsing this thread: 1 Guest(s)