在附加的 DLL/SO 中覆盖导出的数据是否合法?
例子(win32):
t_Controller controller = (t_Controller*) GetProcAddress(SomeDLL, "Controller");
controller->Args = args; // <--- here
controller->Run();
最佳答案
好的 - 所以您正在导出某种结构。
一旦获得指向该结构的指针,从 exe 写入该结构是否合法,完全取决于它在 dll 中写入该结构是否合法。
即它是一个常量结构吗?
如果它没有定义为 const,那么你可以写入它。
如果它被定义为 const,那么您的 GetProcAddress
只是将 const
关闭的一种复杂方式,这将一如既往地导致未定义的行为。即它可能会或可能不会工作,具体取决于您的编译器实现 - 通常是否在全局范围内声明的静态对象被放置在只读数据部分中。
关于windows - 对从 DLL 或 SO 导出的符号的写入权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10120469/