2012-07-03 28 views
0

我正在嘗試爲單線程程序製作看門狗。問題是,我們運行一些外部so/dll(代碼可用),這意味着我們在那裏通過控制。讓gcc調用c操作之間的特定函數

想法是重新編譯這些回調到一種取消例程。

是否有可能讓GCC在此編譯的外部代碼中調用C事務或asm事務之間的某些回調函數?

+2

本帖子的答案解釋瞭如何讓gcc爲每個函數進入和退出調試調用。可能很好,你需要:http://stackoverflow.com/questions/2281739/automatically-adding-enter-exit-function-logs-to-a-project –

+0

進入正確的方向,但我需要更多的調用例如在循環中 – Stasik

+1

究竟是什麼「C交易」? –

回答

0

我什麼建議不涉及編譯器,但是這聽起來像是你可以用POSIX信號或ptrace運行時解決問題...

隨着您可以中斷當前上下文的信號,類似於IRQ在內核模式下會發生的情況。你將不必擔心被「信號安全」(例如:你的處理器不能使用malloc,因爲它可能會中斷malloc本身,而它的數據結構處於不確定狀態)

隨着ptrace您可以通過指令步驟在另一個進程中,就像在調試器中一樣。

仔細踩踏,因爲這些都是難以正確使用的機制,而且很容易在腳中拍攝自己。

+0

POSIX是一個不是真正的替代品,因爲我們使用混合的Windows/Linux環境:( – Stasik

+0

@Stasik在這種情況下,你可能會需要根本不同的方法爲每個..你看'QueueUserAPC''' WaitForDebugEvent'? – asveikau

+0

是的, ptrace似乎是一種實現它的方式,但是,我實際上正在尋找一種單線程解決方案。 – Stasik