CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Odczyt z pamieci double

Odczyt z pamieci double

dział ogólny

Odczyt z pamieci double

Nowy postprzez moderasura » poniedziałek, 17 października 2016, 16:28

Witam!
Mam pytanie odnośnie pobierania liczby zmiennoprzecinkowej typu DOUBLE.
Może ktoś mi podpowie gdzie tu mam błąd w kodzie, lub jak prawidłowo to powinno wyglądać?
Samo wyszukanie adresu w pamięci zrobiłem w programie cheatengine i w tym programie wartości wyświetlają się prawidłowo, lecz w moim jest zupełnie co innego :zawiedziony:

Program główny z którego czytam w cheatengine
https://zapodaj.net/34219c2815801.png.html

Tu znaleziony adres z programu głównego wartość się zgadza z tym co wyżej.
https://zapodaj.net/aa6b938e0c37f.png.html

Tu odczyt z pamięci w moim programie katastrofa :roll:
https://zapodaj.net/8f1a2d2cdd38e.png.html

KOD cpp:     UKRYJ  
DWORD dwGetModuleBaseAddress(DWORD dwProcessIdentifier, TCHAR *lpszModuleName) {
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
                dwProcessIdentifier);
        DWORD dwModuleBaseAddress = 0;
        if (hSnapshot != INVALID_HANDLE_VALUE) {
                MODULEENTRY32 ModuleEntry32 = {0};
                ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
                if (Module32First(hSnapshot, &ModuleEntry32)) {
                        do {
                                if (_tcscmp(ModuleEntry32.szModule, lpszModuleName) == 0) {
                                        dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr;
                                        break;
                                }
                        }
                        while (Module32Next(hSnapshot, &ModuleEntry32));
                }
                CloseHandle(hSnapshot);
        }
        return dwModuleBaseAddress;
}

void __fastcall TForm1::Timer1Timer(TObject *Sender) {
        HWND window = FindWindow(0, _T("Mach3 CNC Controller "));

        if (window == NULL) {
                Label1->Caption = " Nie znalazłem Mach3";
                return;
        }
        else {
                Label1->Caption = " Znalazłem Mach3";

        }

        DWORD pID = 0;

        GetWindowThreadProcessId(window, &pID);

        DWORD baseAddr = dwGetModuleBaseAddress(pID, _T("Mach3.exe"));

        DWORD staticOffset = 0x27D740;

        HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

       double adres;

        DWORD numBytesRead;

        ReadProcessMemory(handle, (LPCVOID)(baseAddr + staticOffset), &adres,sizeof(DWORD), &numBytesRead); // x

        Edit1->Text = adres;

        return;
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: Odczyt z pamieci double

Nowy postprzez polymorphism » poniedziałek, 17 października 2016, 20:04

KOD cpp:     UKRYJ  
ReadProcessMemory(handle, (LPCVOID)(baseAddr + staticOffset), &adres, sizeof(DWORD), &numBytesRead);

Jeśli chcesz odczytać wartość typu double, to dlaczego tam jest sizeof(DWORD)?
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
moderasura
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Odczyt z pamieci double

Nowy postprzez moderasura » poniedziałek, 17 października 2016, 21:39

Ale gapa ze mnie :?
Dzięki wielkie :D

Poprawione
Kod: Zaznacz cały
ReadProcessMemory(handle, (LPCVOID)(baseAddr+staticOffset), &x, sizeof(DOUBLE), &numBytesRead);
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości

cron