Win32 プロセスにフックできれば、次のことができるでしょうか。
プロセス内のクラス内から変数を読み取りますか?
上記の Win32 アプリの完全なソース コードを持っています。それをこのテーマの参照として使用できますか?
乾杯。
はい。モジュールがプロセスにフックされるとすぐに、同じアドレス空間を共有します。つまり、プロセスが割り当てたメモリ (クラス インスタンスなど) にアクセスできるようになります。
クラス インスタンスのオフセットがわかっている場合は、次のいずれかを実行できます。
MSDNのモジュール リストの走査を参照してください。「フック」したいプロセスのMODULEENTRY32を取得したらmodBaseAddr
、オフセットのベースとして使用できます。たとえば、クラス インスタンスを指すグローバル変数が 0x000AD421 にあることがわかっている場合、次のように実行できます。
ClassName *pClassBase = moduleEntry->modBaseAddr + 0x000AD421;
pClassBase->UseSomeFunctions();
また
unsigned char *pClassBase = moduleEntry->modBaseAddr + 0x000AD421; // if we don't know the exact definition of the class we want to play with
float flMemberValue = *reinterpret_cast<float*>((unsigned char *)pClassBase + 24); // float member value at offset 24
// value of member is flMemberValue
*reinterpret_cast<float*>((unsigned char *)pClassBase + 24) = 15.25; // setting the same member value to 15.25.
他のコメンターが述べたように、クラス ベースのオフセットを見つけることは、このプロセスの最も難しい部分です。ただし、クラス定義が手元にある場合は、これが基本的に行う必要がある唯一の作業です (つまり、クラス メンバーのオフセットも検索する必要はありません)。