2
我正在尋找將函數注入函數並在函數返回之前運行該代碼。但是,我不想將我想要注入的代碼作爲頭文件包含在該函數中。在函數返回之前掛鉤函數C
有沒有辦法,以某種方式編譯文件,以便我們不需要包含額外代碼頭文件,並在同一時間,我們可以注入額外的代碼在specefic功能,它終止之前運行它..
只是看看的想法..
感謝
我正在尋找將函數注入函數並在函數返回之前運行該代碼。但是,我不想將我想要注入的代碼作爲頭文件包含在該函數中。在函數返回之前掛鉤函數C
有沒有辦法,以某種方式編譯文件,以便我們不需要包含額外代碼頭文件,並在同一時間,我們可以注入額外的代碼在specefic功能,它終止之前運行它..
只是看看的想法..
感謝
可能回調可以做這項工作,例如:
typedef void (*fpointer)(void);
void foo(void){
//fooing
}
void bar(void){
//baring
}
void f(fpointer some_function){
//do the joob
//some other job before exiting
some_function();
}
,並用它作爲
f(foo);
或
f(bar);
不,其實我想你會發現它不可能做到這一點,而無需修改themselvesa – jozefg
雖然這個問題我提出這項功能作爲C++的重複,答案基本相同。 C和C++都不會公開支持它,但是可以通過預處理器或鏈接器執行各種操作。 –
充其量不過是微不足道的;實際上非常困難。這是編譯時選項嗎?注入的代碼是否需要訪問函數中的局部變量,還是獨立存在?您最接近的方法可能涉及重命名「真實」函數,使用調用重命名的實函數的「真實」函數的名稱編寫鉤子函數,執行鉤子操作,然後返回值。但是這依賴於不需要訪問局部變量。 –