2016-10-25 6 views
0

ポインタのアドレスを文字列変数に格納された値に手動で設定したいと思います。私が持っている:そしてデルファイでポインタのアドレスを手動で設定する方法

addr : String; 
ptr : Pointer; 

addr:='005F5770'; 

それはどのようにptrに割り当てますか?

+4

私はあなたがおそらくこれを行う必要があるかもしれないという理由で、むしろ好奇心が強いと認めます。プライベートアドレス空間の有効なメモリのアドレスは、16進数でエンコードされ、文字列に格納されてどのように終了しますか? –

+0

アドレスを取得できますが、ポインタ変数のアドレスを設定できるかどうかはわかりません。あなたが設定できるのはポインタの値であり、アドレスではありません。 –

+1

@J ...通常、ゲームのライフカウント変数のアドレスを見つけるためにハッキングツールを使用した後 –

答えて

7

:アドレスはコンパイル時に知られているリテラルであるので、あなたは文字列変数を必要としない

ptr := Pointer($005F5770); 

。もちろん

const 
    ptr = Pointer($005F5770); 

、値はリテラルではなく、実際には16進表現で文字列としての人生をスタートした場合:値はコンパイル時に知られているので

実際には、あなたは、これが一定にすることができますあなたが最初の整数に変換する必要があります:64ビット用にコンパイルされたときに、あなたのコードが32ビットポインタの切り捨てに免疫があるように

ptr := Pointer(StrToUInt64('$' + S)); 

UInt64にそれを変換します。

+0

これは動作します、ありがとうございます! – meller92

3

前に付加$または0xで文字列進数と標準StrToInt()を使用します。

ptr := Pointer(StrToInt('$'+addr)); 

あなたのポインタ値が大きく、64ビットコンパイラをターゲットにしている場合は、StrToInt64()


注意を使用することを検討してください整数からポインタへの型キャストが必要であるということです。

このよう
+1

'[dcc32 Error] Unit2.pas(33):E2010互換性のないタイプ: 'Pointer'と 'Integer'' – meller92

+0

申し訳ありませんが、脳コンパイラに欠陥があります。今はまし? –

+0

同じエラーが発生します。多分私はいくつかのquantificatorsが恋しいですか? – meller92

関連する問題