他のアプリケーションの仮想アドレスで直接データにアクセスしたい場合、仮想アドレスを使ってproc/[pid]/memにアクセスできますか?オフセットは仮想アドレスと同じですか?
コードの場合、fseeko(the-proc/[pid]/mem-File, virtual_address, SEEK_SET);
とfread
仮想アドレスからの金額、アプリケーションの仮想アドレスからデータを取得できますか?仮想アドレスのProc/[pid]/memを読む
ありがとうございました!
他のアプリケーションの仮想アドレスで直接データにアクセスしたい場合、仮想アドレスを使ってproc/[pid]/memにアクセスできますか?オフセットは仮想アドレスと同じですか?
コードの場合、fseeko(the-proc/[pid]/mem-File, virtual_address, SEEK_SET);
とfread
仮想アドレスからの金額、アプリケーションの仮想アドレスからデータを取得できますか?仮想アドレスのProc/[pid]/memを読む
ありがとうございました!
/proc/[pid]はちょうどそのものであり、与えられたPIDのプロセス情報を保持しています。各プロセスには独自のPIDがあり、これはLinuxカーネルによってグローバルに格納されています。
ここでは、procからstatcのprocを読み込む方法の例を示します。このコードは、適切なマンページに従って/ proc/[pid]/memに簡単に適合させることができます。
const char *statm_path = "/proc/[pid]/statm";
proc_f = fopen(statm_path, "r");
if (proc_f == NULL)
{
perror("Error opening proc file");
return;
}
// Writing the info from /proc/[pid]/statm to a struct.
if (7 != fscanf(proc_f, "%ld %ld %ld %ld %ld %ld %ld", &result.size,
&result.resident, &result.share, &result.text, &result.lib,
&result.data, &result.dt))
{
perror(statm_path);
return;
}
fclose(proc_f);
/memのフィールドについては、私はthis pageを推奨します。ここから、ページに記載されている統計情報にアクセスできます。特定の変数やそのようなものに明示的にアクセスすることはできないと思います。なぜなら、各プロセスにはカーネルによって個別に管理される独自の仮想メモリ空間があるからです。せいぜい、それはかなり乱雑になる可能性があります。
あなたはそれを正確に行うことはできません。しかし、あなたが探しているものがshared memory
だと私は信じています。 2つのプロセスは共用メモリを使用して共通メモリに読み書きできます。プロセス間のこの共有メモリの仮想アドレスは同じではない可能性があります。また、ユーザーが制御された方法でアクセスする必要があります。そのための自然なロック機構はありません。
このlinkからlinuxgazetteまでは、例については本当にうまく説明できます。