標準によると、typeid演算子は実装依存であるため、別のコンパイラでコンパイルされた他のプロセスによって作成されたオブジェクトで使用するのはナンセンスです。しかし、提供プロセスが同じコンパイラによってコンパイルされる状況はどうですか?同じコンパイラでコンパイルされた別のプロセスから提供されたポインタにtypeidを使用するのは安全ですか?
答えて
異物に検査プロセスのポインタではなく、自身のプロセス空間内にvtableポインタが含まれているため、おそらく動作しません。実行可能なバイナリイメージが実行中のものと同じように配置されているアドレス空間を形成することができれば、それは多分です。同一のコンパイラと同じコマンドラインフラグを使用した場合、またはプラットフォームABIが実行時にtypeid
の動作を正確に指定している場合は、問題ありません。
厳密に言えば、C++オブジェクトモデルは共有メモリに対応していません。プロセス間で送信する前にシリアル化する必要があり、受信側に存在しないC++型を安全にシリアル化する方法はありません。
まあ、私はメモリ共有の問題を考慮しませんでした。すべてのクラスがライブラリで定義されていて、各プロセスの実行可能ファイルがライブラリにリンクされている場合は、両方ともクラス定義があります。それは働くでしょうか? –
@ LiuYongtaiほとんどのOSは、アドレス空間のランダム化を使用して、これが起こらないようにします。問題は、このような戦略は、正当な使用よりも外部アプリケーションの間で広がったり、外部アプリケーションを制御しようとするウイルスにとって、より有用であるということです。 OSを入手して、すべてのプロセスで同じ仮想アドレス範囲にライブラリをロードすることは可能かもしれませんが、これはおそらく良い戦略ではありません。 – Potatoswatter
- 1. コピーされたgit repoを使うのは安全ですか?
- 2. インストールウィザードでユーザーから提供された場所を使用する
- 3. infopathから構築されたシェイプフォームは安全ですか?
- 4. スレッドがブロックされたとき。同じプロセスまたはプロセス全体で別のスレッドがブロックされる可能性がありますか?
- 5. これはデータベースアプリケーションにサービスを提供する安全な方法ですか?
- 6. C++でCライブラリから返されたポインタを使用する
- 7. 正式なNSは、提供されたドメインと同じにすることはできますか?
- 8. Apache .htaccess:あらかじめ圧縮された@ font-faceフォントを提供する
- 9. 署名されたAmazon s3のURLは安全ですか?
- 10. 提供されたユーザーアカウント
- 11. FSYaccスレッドで生成されたパーサーは安全ですか?
- 12. RequestFactoryで生成されたIDはどのくらい安全ですか?
- 13. 同じWebサーバで実行されている安全なウェブサイト
- 14. C++でvoidからキャストされたポインタを削除しても安全ですか?
- 15. 別のプロセスで使用されているファイルを読むにはどうしたらいいですか?
- 16. Spring 3 @スケジューリングされた注釈:同じサービスを使用する2つのプロセス
- 17. JPAはEclipseLinkからどのプロバイダに提供されますか?
- 18. ログインプラットフォームまたはデバイスに応じてトークンが提供されていますか?
- 19. Objective-cのためにXcodeで使用されるコンパイラは何ですか?
- 20. tomcat7-maven-pluginのゴールで「提供された」クラスパスを使用する
- 21. Windows Serverのスライスホストと同じサービスを提供するウェブサイトはどれですか?
- 22. 別のコンピュータから1台のコンピュータから提供されたWebページを表示する方法
- 23. 同じページの別のページからロードされたdivを変更する
- 24. Dropboxから提供されたブラウザのキャッシュイメージ
- 25. モノ - コンパイラのコンパイルされたクラス
- 26. 同じURLにリダイレクトするのは安全ですか?
- 27. プロジェクタ内のロガーで提供されたjarsをロギングする
- 28. Djangoで動的に生成されたイメージを提供する
- 29. 同じローカルシンボルを使用して、別のモジュール内にモジュールを作成することは安全ですか?
- 30. ローカルファイルからロードされたWKWebViewから安全なエンドポイントにアクセスする
なぜ型を知る必要がありますか?破損した設計である可能性があります。 –