如何检查哪个 #define 被编译成二进制文件

How do I check which #define was compiled into binary?

本文关键字:#define 编译 二进制文件 何检查 检查      更新时间:2023-10-16

由于某种原因,错误的opensslv.h标头是通过cmake包含的,或者我认为是这样。我想确定并打印出"OPENSSL_VERSION_NUMBER"的哪个值被编译到我的二进制文件中。我该怎么做?

正如@Galik的注释所提到的,如果可以编辑源,则可以打印出宏的值。

如果你只有一个二进制文件,那么它就会变得困难,因为预处理器将在编译器看到源代码之前将宏名称替换为其值。因此,二进制文件不包含任何返回到原始宏名称的"链接"。

一些编译器(根据我的经验,clang 做得最好)可以在启用调试符号的情况下构建时将此类信息嵌入二进制文件中,以便它可以打印更好的错误消息并使调试更有效。但是在没有调试符号的优化二进制文件中,您几乎不走运。也就是说,除非您开始在知道使用宏的位置周围挖掘二进制文件,并且知道它可能需要的潜在值。然后你也许可以把它挖出来。