Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
c ++ wyszukiwanie ciągów w pamięci innego procesu
#1
Teraz zrobiłem aplikację konsolową, która była w stanie użyć WPM do nadpisania ciągu na adres mem innego procesu w środowisku wykonawczym. Chociaż chcę spróbować zrobić to tak, aby mógł wyszukać wiele ciągów znaków (które będę predefiniował jako tablice znaków) i przechowywać ich adresy mowi w tablicy, a następnie użyję mojego WPM func do nadpisania wszystkiego w tablicy.   Teraz mogę zapytać, w jaki sposób uda się to uzyskać, po prostu potrzebuję informacji lil, aby mnie poprowadzić.
Reply
#2
To całkiem proste: Utwórz mapę, która mapuje adresy na ciągi i ciąg znaków do tymczasowego użytku Dla każdej strony przydzielonej pamięci w procesie Przeczytaj tę stronę w lokalnym buforze Następnie wykonaj iterację po wszystkich bajtach w tym buforze: - Jeśli bieżący bajt reprezentuje drukowany znak ((wartość> = "a" i wartość <= "z") || (wartość> = "A" i wartość <= "Z") dla prostych sprawdzeń znaków), dołącz to do tymczasowego ciągu znaków. Jeśli był to pierwszy znak ciągu tymczasowego, zapisz bieżący adres - Jeśli bieżący bajt nie jest możliwy do odczytu: jeśli tymczasowy ciąg znaków nie jest pusty, dodaj nowy wpis do mapy, używając zapisanego adresu miejsca rozpoczęcia łańcucha i samego ciągu tymczasowego. Gotowe. Na końcu otrzymasz mapę wypełnioną parą adresów i ciągów znaków. Będzie działać dla ciągów ASCII (jeden bajt), inne kodowanie będzie bardziej złożone.
Reply
#3
Zacytować: Originally Posted by Zat To całkiem proste: Utwórz mapę, która mapuje adresy na ciągi i ciąg znaków do tymczasowego użytku Dla każdej strony przydzielonej pamięci w procesie Przeczytaj tę stronę w lokalnym buforze Następnie wykonaj iterację po wszystkich bajtach w tym buforze: - Jeśli bieżący bajt reprezentuje drukowany znak ((wartość> = "a" i wartość <= "z") || (wartość> = "A" i wartość <= "Z") dla prostych sprawdzeń znaków), dołącz to do tymczasowego ciągu znaków. Jeśli był to pierwszy znak ciągu tymczasowego, zapisz bieżący adres - Jeśli bieżący bajt nie jest możliwy do odczytu: jeśli tymczasowy ciąg znaków nie jest pusty, dodaj nowy wpis do mapy, używając zapisanego adresu miejsca rozpoczęcia łańcucha i samego ciągu tymczasowego. Gotowe. Na końcu otrzymasz mapę wypełnioną parą adresów i ciągów znaków. Będzie działać dla ciągów ASCII (jeden bajt), inne kodowanie będzie bardziej złożone. Bardzo dziękuję za odpowiedź, czy masz jakieś informacje na temat ciągów wielobajtowych. O ile bardziej skomplikowane?
Reply
#4
No cóż, są tu fikcyjni (szerokie postacie), które mają zawsze 2 bajty. Więc w pamięci "char a =" A "" będzie reprezentowane przez 0x41, "wchar_t a =" A "" będzie reprezentowane przez 0x41 0x00, ponieważ zajmuje dwa bajty. Następnie są kodowania, które używają zmiennych długości, takich jak te używane dla azjatyckich zestawów znaków, pisząc algorytm dla tych, które mogą okazać się bólem. Proponuję najpierw wdrożyć algorytmy dla zwykłych znaków i szerokich znaków.
Reply




Users browsing this thread: 1 Guest(s)