是否可以调用从DLL导出的类的私有方法? 对于那些想要使用但不应该使用它的人来说,它是否会被隐藏? 谢谢:))
答案 0 :(得分:4)
是的,这可能是,但你需要使用肮脏的强制转换技巧或依赖半未定义的行为,但是为了确定你可以调用导出的函数,无论它是私有/公共状态。 / p>
该语言不提供针对恶意攻击者的安全性。它将帮助每个人遵守规则,但它不会防止那些试图破坏系统的人。
例如:
GetProcAddress()
获取函数的地址,将其强制转换为正确的成员函数类型,然后调用它。void crowbar()
),然后针对它进行编译。 (未定义的行为,因为你违反了一个定义规则,但它可能会起作用......)不要依赖C ++私有关键字来保障安全。
答案 1 :(得分:1)
如果它出现在DLL的导出表中,可以使用GetProcAddress
并调用返回的函数指针来调用它。获得正确的调用约定存在一些技术障碍,但这是可能的(很可能需要一些汇编语言)。
严格地说,任何本机代码都可以调用编译器生成外部实例的任何函数。由DLL导出只是为了更容易找到函数代码的地址。