gpt4 book ai didi

c++ - 如何查看可执行文件中的宏定义值

转载 作者:太空狗 更新时间:2023-10-29 23:11:59 25 4
gpt4 key购买 nike

自从我用 C/C++ 编写代码以来已经有好几年了,对于这个新手问题,我深表歉意。我的代码库根据通过#defines 定义的配置进行不同的编译,这些配置可以作为 args 提供给 makefile。有没有办法对这些#defines 进行编码,以便我可以查看可执行文件并查看定义是什么 - 例如

int main() {
#ifdef CONFIG_A
init_config_a();
#endif
#ifdef CONFIG_B
init_config_b();
#endif
}

#ifdef CONFIG_A
void init_config_a() {
// do something
}
#endif

#ifdef CONFIG_B
void init_config_b() {
// do something for B
}
#endif

我如何判断给定的可执行文件是使用配置 A 还是配置 B 创建的。一种技巧是查找仅根据定义编译的符号(例如 init_config_a),但这非常难看。

编辑:抱歉,我忽略了一条重要信息:该程序实际上是为在嵌入式系统上运行而编译的,因此我无法轻松地添加一个开关或其他一些机制来在本地运行该程序。

最佳答案

好吧,您的问题并没有真正准确地说明您在拥有二进制文件后真正希望如何获取信息。作为不涉及反汇编的解决方案,将拥有一个包含该信息的结构,并在您想要打印该信息时对其进行初始化。也许像这样微不足道的事情:

#include <stdio.h>
#include <string.h>

struct buildinfo {
int CONFIG_A;
int CONFIG_B;
};

void get_build_info(struct buildinfo *info)
{
if(info == NULL)
return;

memset(info, 0, sizeof *info);

#ifdef CONFIG_A
info->CONFIG_A = 1;
#endif

#ifdef CONFIG_B
info->CONFIG_B = 1;
#endif

}

int main(int argc, char **argv)
{

if(argc == 2 && strcmp(argv[1], "-v") == 0)
{
struct buildinfo info;
get_build_info(&info);
printf("build info: CONFIG_A: %s, CONFIG_B: %s\n",
info->CONFIG_A ? "yes" : "no",
info->CONFIG_B ? "yes" ; "no");

return 0;
}


...


return 0;
}

如果您不想分析二进制文件,那么您可以执行 ./yourprogram -v 并查看屏幕上打印的信息。

关于c++ - 如何查看可执行文件中的宏定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com