是否有任何简单的方法(黑客)暴露前方声明隐藏的标题?

时间:2017-06-02 02:44:37

标签: c++ c ssl openssl forward-declaration

我知道这个问题听起来很傻...... 我正在一个使用大量openssl库的项目工作。我目前正在努力将使用过的库从1.0升级到1.1,这给了我很多困难。 Openssl社区决定让人们不再访问其BIO,SSL,RSA,EVP_PKEY的内部结构。这似乎是一个很好的方向,但我使用这些结构有数千行代码(例如EVP_PKEY *key; key->reference = XXX;)。

我注意到openssl通过前向声明隐藏这些代码(即,将公共头部分隔为公共头部+私有头部)。

例如,旧结构中的代码如下所示: 包括/ obj.h:

   struct obj_st {
     int property1, int property2 ....etc
   }

新结构变成了 包括/ obj.h:

   struct obj_st;

包括/ obj_private.h:

   struct obj_st {
     int property1, int property2 ....etc
   }

在这种情况下,我将整个openssl编译为静态库。 #include<openssl/obj.h>包含它的代码不再能够访问这些属性。

处理它的一种简单方法是将所有这些私有头文件移回原始格式(无前向声明)。但这意味着每次拉新的openssl代码时我都需要这样做。

是否有任何简单的黑客攻击我可以让它们再次曝光?我想在我的代码中包含私有标头(例如#include<openssl/obj_private.h>),但许多私有标头也依赖于其他标头,结果我需要将所有标头复制到我的usr / include / openssl文件夹。我不确定这是不是一个好主意......

1 个答案:

答案 0 :(得分:5)

简短版本:你没有。

长版本:有一个严重的原因,库开发人员正在尝试使公共API尽可能简洁和简单,同时隐藏库用户的实现细节。原因是,只要API合同得到维护,那些不属于API的代码可能会在没有任何公告的情况下自由更改。

重点是,如果图书馆开发人员决定隐藏以前暴露过的东西(这是一个非常强烈的举动,我不知道,但我相信你),他们有一个严肃的意图改变这段代码将来会很明显。如果他们在某些时候这样做,你的代码将以最扭曲的方式打破(考虑到你愿意升级,我猜你会根据你的问题) - 并且对结构成员的访问将无济于事你。

所以,不幸的是,最好的行动方案是重构代码,以便使用新的,不太方便的API。作为图书馆开发人员图书馆用户,我很抱歉。