Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Nie można pisać do vTable
#1
Ostatnio próbowałem podpiąć funkcje i zacząłem szukać starszych kodów źródłowych i wiki. Kiedy próbowałem zmienić wartość w vTable (ClientModeShared), znalazłem przy użyciu ClassInformer (czy 0x8EE28C poprawne atm?), Gra się zawiesiła. Następnie debugowałem grę i dowiedziałem się, że moja biblioteka dll spowodowała zapisanie naruszenia dostępu do 0x1e4de28c. Następnie otworzyłem ReClass, aby sprawdzić, o czym piszę, ale wygląda na to, że adres był poprawny.       Kod:   DWORD client = (DWORD) GetModuleHandle ("client.dll"); DWORD vtableOff = 0x8EE28C; DWORD * vTable = (DWORD *) (client + vtableOff); * vTabela = 0;   Co zrobiłem źle?
Reply
#2
Tabele VTables są przechowywane w .rdata (dane tylko do odczytu), aby je pisać, musisz użyć VirtualProtect.
Reply
#3
Dziękuję Ci! Spróbuję teraz
Reply
#4
Wykonaj VirtualProtect, aby przyznać sobie prawo do zapisu lub uniknij bezpośredniej modyfikacji oryginalnego vtable ... Utwórz kopię oryginalnego vtable w swojej własnej pamięci (policz funkcje vfunctions, przydziel wystarczającą ilość pamięci, wykonuj memcpy), przekieruj wskaźniki vfunc do skopiowanego vtable, a następnie spraw, aby gra używała skopiowanego vtable. Aby odłączyć, po prostu spraw, aby gra korzystała z oryginalnego vtable, który zapisałeś. Klasa, która to zarządza, jest naprawdę świetnym pomysłem.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)