对从DLL或SO导出的符号进行写访问

时间:2012-04-12 09:00:29

标签: windows linux dll shared-libraries

覆盖附加的DLL / SO中的导出数据是合法的吗?

示例(win32):

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

1 个答案:

答案 0 :(得分:1)

好的 - 所以你要导出某种结构。

一旦获得了指向结构的指针,从exe中写入结构是否合法,完全取决于它在dll中是否合法写入结构。

即。它是一个const结构吗? 如果它没有定义为const,那么你可以写它。 如果它被定义为const,那么你的GetProcAddress只是一种复杂的方式来关闭const,这将一如既往地导致未定义的行为。即它可能,也可能不起作用,这取决于你的编译器实现 - 通常是否在全局范围内声明的静态对象放在只读数据部分。