windows - 对从 DLL 或 SO 导出的符号的写入权限

标签 windows linux dll shared-libraries

在附加的 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/

相关文章:

windows - mingw32-make 启动失败

c++ - 设置文件属性成功但检索失败

windows - 无法在 Microsoft Powershell 中使用 `mvn -D` 参数运行 Maven,但可以在命令提示符下运行

c# - '无法加载文件或程序集 'netstandard, Version=2.0.0.0, ...'。不应加载引用程序集以执行

linux - 通过减去 4 :00 hours 来更改文件创建日期

asp.net - 自制SSL的绿条

c - 列出导入的PE文件的DLL

windows - VBScript 预期结束 800A03F6

sql-server - SQL 作业和 Windows 任务计划程序有什么区别?

linux - 从 shell 脚本执行 R 命令