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