私は最近、基本的なメモリ スキャナを完成させました。これまでにこれを行ったことのあるすべての人と同じように...プログラムが起動するたびに値をスキャンするのは大変なことだと気付きました!
アプリケーションにハード コードできるように、これらの値のベース ポインターを作成すると便利です。これを行う方法を理解するために、「ターゲット」にビジュアル C++ を使用してこの短いコンソール アプリを作成しました。
int main(int argc, char *argv[], char *envp[])
{
unsigned int * Pointer1;
Pointer1 = (unsigned int *)malloc(sizeof(unsigned int));
char s[20];
while(1)
{
std::cout<<"(Pid:"<<GetCurrentProcessId()<<") Please enter a value to be stored in memory (type 'q' to exit): \n";
std::cin>>s;
std::cout<<"\n";
if(s[0] =='q')
{
break;
}
*Pointer1 = str2int(s);
std::cout<<"Value:"<<*Pointer1<<" addr:0x"<<Pointer1<<"\n";
}
free(Pointer1);
return 0;
}
次に、メモリスキャナーに従ってこのアプリを使用して、ポインターのアドレスとポインターが指すメモリアドレスを計算しました。以下のデータを照合するために、これを数回行いました。(「|」を区切り文字として Excel に貼り付けます)
pid |P Hex|P Val|PHx to Dec|M Hex|M Val|MHx To Dec
7028|002afcfc|216032|2817276|00034BE0|10|216032
6312|0032fa70|4541408|3340912|00454BE0|20|4541408
1512|0043fb1c|3242304|4455196|00317940|30|3242304
8140|0036f9fc|1997096|3602940|001E7928|30|1997096
ただし、ポインターがどのメモリアドレスになるかを計算する信頼できる方法を見つけることはできません。これを行うためにどのような方法/計算を実行できますか? ポインター チェーンの例のようにもっと生き生きとしたものがあることは承知していますが、これは難しくする前の良い出発点のように思えました。