添付されたDLL/SOのエクスポートされたデータを上書きすることは合法ですか?
例(win32):
t_Controller controller = (t_Controller*) GetProcAddress(SomeDLL, "Controller");
controller->Args = args; // <--- here
controller->Run();
添付されたDLL/SOのエクスポートされたデータを上書きすることは合法ですか?
例(win32):
t_Controller controller = (t_Controller*) GetProcAddress(SomeDLL, "Controller");
controller->Args = args; // <--- here
controller->Run();
わかりました - あなたはある種の構造体をエクスポートしています。
構造体へのポインターが取得されると、exe から構造体への書き込みが合法かどうかは、dll で構造体への書き込みが合法かどうかに完全に依存します。
つまり、それは const 構造体ですか? const として定義されていない場合は、それに書き込むことができます。それが const として定義されている場合、あなたのGetProcAddress
は複雑なキャストconst
オフの方法であり、その結果、いつものように未定義の動作が発生します。つまり、コンパイラの実装に応じて、動作する場合と動作しない場合があります。通常は、グローバル スコープで宣言された静的オブジェクトが読み取り専用データ セクションに配置されているかどうかにかかわらずです。