Schräge Speicher Verschiebung auf alle Strukturen

stimmen
0

Ich habe seit Monaten auf diese gearbeitet und bin absolut fahl, dass ich noch mein Team kann dies herauszufinden: /

Hier ist die Situation - ich leite die Erinnerung an ein anderes Programm, speziell Lese Strukturen. Wenn etwas einfach, wie eine ganze Zahl lesen, es funktioniert gut. Wenn eine Struktur zu lesen, muss ich meine Leseort zurück 4 Bytes verschieben, sonst habe ich am Ende an der falschen Stelle zu lesen und die gespeicherten Werte sind nicht korrekt.

Hier ist ein Beispiel:

ReadProcessMemory( hProcess, lpBaseAddress, &xBuffer, sizeof( xBuffer ), nullptr );

So lange, dass xBuffer ist keine Klasse oder ein Struct, das funktioniert gut. Sagen Sie, dass xBuffer als ein Objekt von vector_t deklariert wird - das ist der einzige Weg, mein Lese- funktioniert:

class vector_t
{
public:
    float x, y, z;
};
vector_t xBuffer;
ReadProcessMemory( hProcess, lpBaseAddress - 0x4, &xBuffer, sizeof( xBuffer ), nullptr );

Ich weiß, dass dieser Code nicht MCRE / reproduzierbar ist, weil ich das Kopieren über Schnipsel meines Codes versucht habe und es funktioniert gut, aber das ist alles, was passiert ist, und ich habe keine Ahnung, was sonst diese verursachen könnte.

Immer die Größe einer Klasse, gibt es Größe aller Mitglieder + 0x4, wann sollte es + 0x1, nicht wahr? Vielleicht hilft das?

EDIT: Nach der weiteren Fehlersuche, fand ich das Problem mit atomar ist. Warum?

#include <Windows>
#include <atomic>

class vector_t
{
public:
    float x, y, z;
};

/* ... */

    std::atomic< DWORD > dwBaseAddress { };
    /* ... */
    std::atomic< vector_t > vecBuffer { };
    // unless we subtract 4 bytes from lpBaseAddress._My_val, we will not read properly
    ReadProcessMemory( hProcess, LPVOID( lpBaseAddress._My_val ), &vecBuffer, sizeof( vector_t ), nullptr );

Wenn ich eine Kopie von vecBuffer machen (dh nicht atomar ist), es funktioniert gut. Was kann ich diese Situation nicht geschieht, um sicherzustellen, tun?

Veröffentlicht am 14/01/2018 um 03:21
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Eine Kopie des atomaren Variable, dann über Werke zu kopieren.

Ich würde gerne die Gründe , es zu wissen, obwohl, so dass ich verlasse die Frage offen , falls jemand weiß. Ich nehme nur an den Entwickler der WinAPI Funktion ReadProcessMemorywissen können , da wir den Code nicht wirklich sehen können.

Was auch immer :/

Beantwortet am 14/01/2018 um 04:45
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more