1

我有一个带有许多类型转换和强制转换的遗留 c 项目。通常为了检查溢出动态行为,gcc(和 C 语言)为此定义了一个内置函数:

内置函数:bool __builtin_add_overflow (type1 a, type2 b, type3 *res)

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

为了在不更改任何遗留代码的情况下拥有相同的功能,是否可以指示 gcc 使用此类内置函数并在内置函数返回 true 时调用提供的函数作为捕手?我希望我能找到类似的东西:

无效_cyg_add_overflow_catcher(A, B, __FILE , LINE );

GCC 已经可以检测功能,用于可追溯性和分析,所以这个概念并不奇怪。有任何想法吗?

4

1 回答 1

2

GCC 将这些函数降级为高效的 asm 序列,因此它们不会出现在最终目标代码中。另一方面,在UBSan 模式下编译时, GCC 会在溢出时从 libubsan.so 调用专用回调。您可以在您的可执行文件中覆盖这些回调并进行必要的处理(这当然是很hacky)。

请注意,GCC 仅跟踪有符号数的溢出,因为标准定义了无符号溢出。

于 2016-12-04T14:56:14.197 回答