2013年8月8日 星期四

C語言中,在呼叫函數前和呼叫函數後,執行某段程式碼

    gcc 有很多強大的選項,可以讓我們作到一些特別的事情。假設我們希望每次呼叫函數前,都先執行特定的動作。我們可以這樣寫。




#include <stdio .h>

__attribute__((no_instrument_function))
void __cyg_profile_func_enter(void *func_address, void *call_site){
    printf("Enter\n");
}

__attribute__((no_instrument_function))
void __cyg_profile_func_exit(void *func_address, void *call_site){
    printf("Exit\n");
}

void fun(){
    printf("Test\n");
}

int main(){
    fun();
}

    編譯時,加上 -finstrument-functions 這個參數。那麼每當呼叫函數前,都會先呼叫 __cyg_profile_func_enter。當函數要 return 時,則會呼叫 __cyg_profile_func_exit。 如同那兩個函數的名字,這功能一開始是為了作到 profile 的功能。不過我們可以拿來做些其他的事
參考書目: BINARY HACKS

沒有留言:

張貼留言