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