- 子内のページから親内のページを保護する必要が
とFD = -1のmmapで。
- 私は、fchmodで基礎となるメモリを保護しようとしました。
私は現在、次の設定を利用しています:
shm_unlink("/mymem");
int fd = shm_open("/mymem", O_RDWR | O_CREAT,0777);
printf("FD is :%d\n", fd);
ftruncate(fd, numberPages*getpagesize());
int *z = mmap(NULL, getpagesize()*numberPages, PROT_WRITE|PROT_READ, MAP_SHARED,fd,0);
printf("Memory is at : %p\n", z);
if(fork()){
printf("Protecting %d\n",mprotect(z, getpagesize(), PROT_NONE));
printf("(1)No issues, apparently\n");
sleep(2);
exit(1);
}else{
sleep(1);
*z = 3;
printf("(2)No issues, apparently\n");
sleep(5);
printf("Value of z: %d\n",*z);
}
親プロセスは、もはや読むことができるように、私は(MPROTECTで、またはその他の)ページを保護できるようにするには、子プロセスを必要としません/ページに書き込む。
受信出力は次のとおりです。
FD is :3
Memory is at : 0xf581a000
Protecting 0
(1)No issues, apparently
(2)No issues, apparently
Value of z: 3
私は、z = 3
は残念ながら、子供がこの機能を持っている必要があります*ラインで発生するセグメンテーションフォールトを期待して(というか、希望する)していますそれはTCPサーバーとしても動作しており、(私が考えていない別の方法がない限り)TCP接続を介してページをブロックする要求が受信されます。
アドバイスはありますか?
あなたは問題を正確に釘付けにしました。私は今ptrace()を調べるつもりです。残念ながら、親プロセスは常に他の操作を実行しているので、メッセージが到着するのを待つ間にブロックすることはできません>< – Tabgok
子プロセスからのメッセージを待つスレッドを親プロセスに作成することができます親プロセスのメインスレッドは作業を開始します。 – Celada
Hmmm - それは悪い考えではない、私は昼食後にそれを試してみる。 – Tabgok