Tag: 嘲笑

在C中运行时模拟?

这已经在我的列表中待了很长时间。 简而言之 – 我需要在运行mocked_dummy()在运行mocked_dummy()运行mocked_dummy() ,而不需要修改factorial() 。 我不关心软件的切入点。 我可以添加任意数量的附加function(但不能修改/*—- do not modify —-*/内的代码/*—- do not modify —-*/ )。 我为什么需要这个? 对一些传统C模块进行unit testing。 我知道有很多可用的工具,但如果可以运行时模拟我可以改变我的UT方法(添加可重用的组件)让我的生活更轻松:)。 平台/环境? Linux,ARM,gcc。 我正在尝试的方法? 我知道GDB使用陷阱/非法指令来添加断点( gdb内部 )。 使代码可自行修改。 用非法指令替换dummy()代码段,并作为紧接的下一条指令返回 。 控制转移到陷阱处理程序。 陷阱处理程序是一个可重用的函数,它从unix域套接字读取。 传递mocked_dummy()函数的地址(从映射文件中读取)。 模拟函数执行。 从这里开始存在问题。 我还发现这种方法很繁琐,需要大量的编码,有些也在组装中。 我还发现,在gcc下,每个函数调用都可以被挂钩/检测 ,但是再次不是很有用,因为该函数是用来模拟的,无论如何都会被执行。 我可以使用其他任何方法吗? #include #include void mocked_dummy(void) { printf(“__%s__()\n”,__func__); } /*—- do not modify —-*/ void dummy(void) { printf(“__%s__()\n”,__func__); […]