Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gcc捕获类型转换溢出_C_Gcc_Overflow_Instrumentation_Ubsan - Fatal编程技术网

使用gcc捕获类型转换溢出

使用gcc捕获类型转换溢出,c,gcc,overflow,instrumentation,ubsan,C,Gcc,Overflow,Instrumentation,Ubsan,我有一个遗留的c项目,有许多类型转换和转换。通常,为了检查溢出动态行为,(和C语言)定义了一个内置函数: 内置函数:bool uu内置u添加u溢出(类型1 a、类型2 b、类型3*res) 如果结果溢出,函数将返回true。然后我的程序可能会捕捉到这种情况并相应地采取行动 为了在不更改任何遗留代码的情况下具有相同的功能,是否可以指示gcc使用此类内置函数,并在内置函数返回true时调用提供的函数作为捕获器?我希望我能找到像这样的东西: void\u cyg\u add\u overflow\u

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

内置函数:bool uu内置u添加u溢出(类型1 a、类型2 b、类型3*res)

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

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

void\u cyg\u add\u overflow\u catcher(A,B,\u文件

GCC已经可以进行跟踪和分析,所以这个概念并不奇怪。
有什么想法吗?

GCC将这些函数降低为高效的asm序列,因此它们不会出现在最终的目标代码中。另一方面,在GCC中编译时,将从libubsan.so调用专用回调。您可以在可执行文件中重写这些回调,并进行必要的处理(这当然是非常有技巧的)


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

您是否有可能简单地使用它?我不知道UBSan,它完全符合我的需要。但是它将如何报告裸机c实现呢?“但是它将如何报告裸机c实现呢”-你的意思是你想检测像bootloader这样的裸机程序中的溢出吗?在这种情况下,您需要自己提供UBSan回调的实现,并将其链接到您的应用程序中。这样做是有可能的。