我正在尝试为单线程程序制作一个看门狗。问题是,我们运行一些外部 so/dll(代码可用),这意味着我们将控制权传递到那里。
这个想法是通过一些回调来重新编译它们,以取消例程。
是否可以让GCC在这个编译的外部代码中的C事务或asm事务之间调用一些回调函数?
我要建议的内容不涉及编译器,但这听起来像是一个可以在运行时使用 POSIX 信号或
ptrace
... 解决的问题
使用信号,您可以中断当前上下文,类似于内核模式下使用 IRQ 发生的情况。 您将不得不担心“信号安全”(例如:您的处理程序无法使用
malloc
,因为当其数据结构处于不确定状态时,它可能会中断 malloc
本身。)
使用
ptrace
,您可以在另一个进程中单步执行指令,就像在调试器中一样。
小心行事,因为这些机制很难正确使用,而且很容易搬起石头砸自己的脚。