我在评论中看到使用__func__
存在安全风险。我需要了解这是怎么回事?
答案 0 :(得分:4)
使用__func__
显示二进制文件中的函数名称,这样可以简化可以访问二进制文件的攻击者的工作。
答案 1 :(得分:0)
它使逆向工程更容易。因此,如果您希望保持应用程序保密的方式,那么攻击者的生活就会变得更容易。
这与DRM功能相关,或者如果您希望在竞争应用程序中模仿您的算法更加困难。
但它不会影响安全性,因为反向显示漏洞的应用程序首先是不安全的。
答案 2 :(得分:0)
如果您的应用程序的安全性依赖于其保留的秘密功能名称,则使用__func__
会带来安全风险,因为编译器需要将函数名称存储在已编译的二进制文件中的某处。
答案 3 :(得分:0)
__func__
是C99标准的预定义标识符,当在函数内部使用时,它扩展为包含函数名的字符数组变量。从C99 6.4.2.2/1描述:
标识符
__func__
由翻译者隐式声明为 如果,紧跟每个功能的开口支撑 定义,声明static const char
__func__
[] =“function-name”;出现了,在哪里 function-name是词法封闭函数的名称。这个 name是函数的简单名称。
请注意,它不是宏,在预处理过程中没有特殊含义。
请查看此链接,了解有关__func__
的更多信息:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1642.html
如果解决方案依赖于预定义的上下文相关常量__func__
中涉及的扩展,则无法在函数中安全地实现它并提供相同的便利性。
__func__
在其调用时进行文本扩展,因此,它可以通过评估break,continue或return语句或无法正确终止if语句来轻松影响调用代码的控制流。调用它的效果可能会令人惊讶并导致细微的缺陷。
将内联或静态函数添加到类似函数的宏或__func__
。
但是,在定义__func__
是不可避免的情况下,定义应避免使用更改调用代码控制流的语句。理想情况下,它应该是单个表达式。