C-使用GCC捕获类型转换溢出



我有一个带有许多类型的转换和铸件的旧版C项目。通常要检查溢出动态行为,GCC(和C Lang)为此定义了一个内置功能:

内置功能:bool __builtin_add_overflow(type1 a,type2 b,type3 *res)

如果结果溢出函数返回true。然后我的程序可能会捕获这种情况并采取相应的行动。

为了具有相同的功能而不更改任何遗留代码,是否可以指示GCC使用此类内置词并将提供的功能调用为捕捉器,如果内置返回true?我希望我能找到类似的东西:

void _CYG_ADD_OVERFLOW_CATCHER(a,b,__file line );

GCC已经可以仪器功能,用于可追溯性和分析,因此概念并不奇怪。有什么想法吗?

这些功能被GCC降低到有效的ASM序列,因此最终对象代码中不存在它们。另一方面,当以瑞银模式编译时,gcc将拨打libubsan.so的专用回调。您可以在可执行文件中覆盖这些回调并进行必要的处理(这当然是相当骇人听闻的)。

请注意,GCC仅跟踪签名的数字作为未签名的溢出的溢出,由标准定义。

最新更新