私は疑問も持っていません。私はこれが何らかの確認であり、対象を正しく理解していると思います。
私はリバースエンジニアリング研究をやっています。ここに私が持っているものがあります。構造体へのポインタの配列へのポインタ
struct {
char str[n]
int x
float a
}
そして、我々は我々が見ているプロセスのメモリ内のこれらの構造体の配列を持っている: のは、私たちはこのようになります構造/クラスを、持っているとしましょう。
だから、私が持っているのは構造体へのポインタの配列へのポインタです。
私が間違っていれば、あなたは私を修正してください。この配列の最初の要素(ポインタではなく実際の構造体)のx値を読み取るには、以下の手順に従わなければなりません:
- ポインタが指す値(4バイト)を読み取ります。
- オフセットがなければ、以前に値が読み取られた値も4バイトで読み込まれます(構造体が始まるアドレスにつながります)
- これにnに等しいオフセットを追加する必要があります。そして、ステップ2のアドレスから値を読み取る(step2result + n + 1)。
私は正しいですか?最初の構造に含まれる実際のXを取得できますか? 2番目の値からX値を取得するには、step2(+4バイト)にオフセットを追加するだけですか?
私はこれを正しくやっていると思っていますが、実際にポインタから構造体に到達できません。配列へのポインタは100%です。
お読みいただきありがとうございます。回答を待っています。それ以上の情報が必要な場合は、それを求めてください。
p.s.何もひどくひびが入ったり、教育的目的のためにすべてのものを取得したりすることはありません。
追加:
OK、これを単純化しようとすると、説明と理解が難しくなりました。今私はそれを修正しようとします。
1つの構造は、ゲームのNPCパラメータを記述します。構造体全体のサイズは0x1200です。最初の16バイトはID情報です。この情報が64バイトの文字列になった後は、その名前です。その後、X/Y/Z座標になります。これらの後のすべては重要ではありません。だから私はちょうどその構造が始まるアドレスには0x1200を加算または減算して他の構造を見つけることができます
/
:
はそれを見つけるのはとても難しい波平、ここではそれがどのように見えるかのスクリーンショットです。
構造体が始まるアドレスを検索し、それに対するポインタが見つかりました。 それから私は、ポインタを発見し、そのようなことだへのアクセスのためにスキャン:その後、私はeax
値を検索し、私はこれがの配列であると考え、なぜだeax
で指し示すポインタを見つけ
mov [eax+edx*4+00320], ecx
をポインタ。
私はこれをもう少し具体的に説明しました。
構造体の配列を:
あなたは、メモリの内容の定義に特別な注意を払う必要があり、私は
testA
配列定義の最初の行にいくつかのコメントを追加しました。必要以上に間接指示のレベルが1つ増えます。 – Jester