出于某种原因,错误的 opensslv.h header 正在通过 cmake 包含,或者我认为是这样。我想确定并打印出“OPENSSL_VERSION_NUMBER”的哪个值被编译到我的二进制文件中。 我该怎么做?
最佳答案
正如@Galik 的评论所提到的,如果您可以编辑源代码,则可以打印出宏的值。
如果您只有一个二进制文件,那么它会变得很困难,因为预处理器会在编译器看到源代码之前用它的值替换宏名称。因此二进制文件不包含任何返回原始宏名称的“链接”。
某些编译器(根据我的经验,clang 做得最好) 可以在启用调试符号的情况下将此类信息嵌入到二进制文件中,以便打印更好的错误消息并使调试更有效。 但是在没有调试符号的优化二进制文件中,你几乎要倒霉了。也就是说,除非您开始围绕您知道使用宏的位置以及您知道它可能采用的潜在值的位置对二进制文件进行反汇编。然后你可能能够把它挖出来。
关于c++ - 如何检查哪个#define 被编译成二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357780/