2016-12-30 1 views
0

私は、プログラムのメモリ内の構造体へのポインタを探しています。これは、互いに4バイト離れていますが、その量は変わる可能性があります。私は、構造体の後に、ポインタではない他の変数が来ていることは間違いないと確信しています。メモリ内の変数がポインタであるかどうかをどのように知ることができますか?

私はポインタとしてその次の変数を使用しようとした場合、それは私が探している構造体のGetProcessMemory(私はこれをC++ btwでやっている)が失敗する最高のオフセットを適用すると思ったそれは私が探しているものではなく、私が探している構造体へのポインタの "リスト"がそこで終わることを知っています。

しかし、次の変数が別の有効な構造体を指し示す値を持ち、でない場合は、が失敗する可能性があるので、これは信頼できないように思われるので、より良い方法があるかどうか尋ねています。

CheatEnglineはそれをきれいにしているようですが、何が欠けていますか?

ありがとうございます。

+2

完全に信頼できる方法はありません。構造型のアラインメントや、ヒープとスタックに使用されるアドレス範囲などのヒューリスティックだけです。 – Barmar

+0

あなたは 'typeid(variables).name()'を使ってタイプを得ることができます – Raindrop7

+0

@ Raindrop7いいえ、できません。 –

答えて

0

ポインタはアドレスに変換されます。

アドレスは他の数字と同じように数字です。

有効な範囲のアドレスを知っている場合は、数字がポインタである可能性を高めることができます。ただし、保証はありません。

メモリロケーションによって表される目的またはタイプを指定する属性はメモリ内に存在しません。

0

私は考えていました。 これは関数のためのものですので、始まりのmem addr、ポインタ変数間の距離、最大の量、構造体の最大オフセットのようないくつかのパラメータを(デフォルトで)置きます。それらを使って、構造体の開始点と終了しない場所の一般的なアイデアを正確に知ることができます。私が探していないものを見つけるチャンスは最小限です。

アイデアはそうでなければそれを許可しないゲーム(私はゲームであまりにも多くの数を使ったことがないので、おそらくハックかもしれない - それは興味深いかもしれない)のための泥棒を作ることです。だから、おそらく、私は構造体の量を変数にいくつかのオフセットを見つけることができた、そして問題はないでしょう。

関連する問題