Wskaźnik na adres hexadecymalny

Wskaźnik na adres hexadecymalny
LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Mam problem z wydobyciem wartości zmiennej znajdującej się pod adresem 36F11DC4.

Kopiuj
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    int *wsk = 0x36F11DC4;
    cout << &wsk;
    return 0;
}

Powyższy kod nie działa, pomoże ktoś zrozumieć w czym jest błąd i jak to powinno wyglądać?
Pojawia się error: invalid conversion from 'int' to 'int*' [-fpermissive].

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Błąd jest w tym, że koncepcyjnie liczba i wskaźnik to różne typy i nie można ich zamiennie stosować. Możesz użyć reinterpret_cast aby zamienić jeden typ na drugi, ale to dość podejrzane - co chcesz osiągnąć?

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Znalazłem adres zmiennej w procesie programu za pomocą Cheat Engine, chcę się dowiedzieć jaka wartość jest pod tym adresem.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
4

Jak to inny proces to musisz pobrać tę wartość za pomocą odpowiedniej funkcji winapi (lub odpowiednika dla innych systemów), wszystkie popularne nowoczesne systemy wirtualizują pamięć procesów.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Tak powinno wyglądać przypisanie do wskaźnika adresu podanego z palca

Kopiuj
int *wsk = (int*)0x36F11DC4;

A tu dowód, że wskaźnik faktycznie wskazuje na adres - https://onlinegdb.com/SkqB0P26Q

Miałem tu napisać, że tak to się nie uda uzyskać tego co chcesz, ale już @kq mnie ubiegł.

ŁA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
4

Ewentualnie możesz wstrzyknąć swój kod jako bibliotekę do tej aplikacji i uruchomić na niej remotethreada z funkcją załadowania biblioteki.

Z winapi masz openprocess, writeprocessmemory i readprocessmemory do takiego prostego manipulowania pamięcią.
Potem masz jeszcze ntkernel.

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Pokombinuję z tym winapi.

MY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1107
1
MasterBLB napisał(a):

Tak powinno wyglądać przypisanie do wskaźnika adresu podanego z palca

Kopiuj
int *wsk = (int*)0x36F11DC4;

Ja się przyczepię, że lepiej w C++ nie używać rzutowania w stylu C, ponieważ te rzutowanie może prowadzić do niepoprawnych wyników i generować błędy ponieważ nie dokonuje żadnych sprawdzań podczas kompilacji. Np ładnie to powiedzieli tu https://stackoverflow.com/questions/1609163/what-is-the-difference-between-static-cast-and-c-style-casting

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.