我正在嘗試爲單線程程序製作看門狗。問題是,我們運行一些外部so/dll(代碼可用),這意味着我們在那裏通過控制。讓gcc調用c操作之間的特定函數
想法是重新編譯這些回調到一種取消例程。
是否有可能讓GCC在此編譯的外部代碼中調用C事務或asm事務之間的某些回調函數?
我正在嘗試爲單線程程序製作看門狗。問題是,我們運行一些外部so/dll(代碼可用),這意味着我們在那裏通過控制。讓gcc調用c操作之間的特定函數
想法是重新編譯這些回調到一種取消例程。
是否有可能讓GCC在此編譯的外部代碼中調用C事務或asm事務之間的某些回調函數?
我什麼建議不涉及編譯器,但是這聽起來像是你可以用POSIX信號或ptrace
運行時解決問題...
隨着您可以中斷當前上下文的信號,類似於IRQ在內核模式下會發生的情況。你將不必擔心被「信號安全」(例如:你的處理器不能使用malloc
,因爲它可能會中斷malloc
本身,而它的數據結構處於不確定狀態)
隨着ptrace
您可以通過指令步驟在另一個進程中,就像在調試器中一樣。
仔細踩踏,因爲這些都是難以正確使用的機制,而且很容易在腳中拍攝自己。
本帖子的答案解釋瞭如何讓gcc爲每個函數進入和退出調試調用。可能很好,你需要:http://stackoverflow.com/questions/2281739/automatically-adding-enter-exit-function-logs-to-a-project –
進入正確的方向,但我需要更多的調用例如在循環中 – Stasik
究竟是什麼「C交易」? –