0

添付されたDLL/SOのエクスポートされたデータを上書きすることは合法ですか?

例(win32):

t_Controller controller = (t_Controller*) GetProcAddress(SomeDLL, "Controller");
controller->Args = args; //  <--- here
controller->Run();
4

1 に答える 1

1

わかりました - あなたはある種の構造体をエクスポートしています。

構造体へのポインターが取得されると、exe から構造体への書き込みが合法かどうかは、dll で構造体への書き込みが合法かどうかに完全に依存します。

つまり、それは const 構造体ですか? const として定義されていない場合は、それに書き込むことができます。それが const として定義されている場合、あなたのGetProcAddressは複雑なキャストconstオフの方法であり、その結果、いつものように未定義の動作が発生します。つまり、コンパイラの実装に応じて、動作する場合と動作しない場合があります。通常は、グローバル スコープで宣言された静的オブジェクトが読み取り専用データ セクションに配置されているかどうかにかかわらずです。

于 2012-04-12T11:32:08.607 に答える