【发布时间】:2019-12-01 01:45:29
【问题描述】:
在分析 Ghidra 的自动反编译器的 C 输出时,我发现了以下 sprintf 调用:
some_function(char *shm_name, int key, int subkey) {
...
sprintf(shm_name,"%s%d_%d","/XSAL_Shm_",key,subkey);
...
}
如果我自己写这段代码,我会写
sprintf(shm_name,"/XSAL_Shm_%d_%d",key,subkey);
因为我认为它更清晰、更易于阅读和理解,而且 - 根据我的经验 - 更常见。
我正在分析的代码是为在 QNX 上运行而编写的。
有什么理由把它写成前者?是否有任何 C 风格指南要求/推荐任何一种方式?哪个更高效?
【问题讨论】:
-
readelf -wm executablefile是否显示任何宏?也许原始代码有类似#define SHMPREFIX "/XSAL_Shm_" -
@MarkPlotnick
readelf -wm ...不产生任何输出。不过,这是我没有考虑过的一个很好的理由。稍后在具有环境变量名称的同一函数中再次出现类似的东西,我绝对想象它会在宏中定义。这可能就是答案。 -
@MarkPlotnick 您应该将其发布为答案。
标签: c format-string