簡體   English   中英

如何通過gcc在功能的序言和結語中設置匯編指令

[英]How can I plant assembly instructions in the prologue and epilogue of function via gcc

我嘗試為某個c項目構建探查器。 我希望gcc在編譯時在所有函數入口和函數出口點中設置一些匯編指令。 我嘗試在網絡上搜索一些指南,但沒有成功。 我在哪里可以學習如何做到這一點?

預先感謝。

顯然,您可以使用-finstrument-functions標志來獲取gcc以生成檢測調用

void __cyg_profile_func_enter(void *func, void *callsite); 
void __cyg_profile_func_exit(void *func, void *callsite); 

在功能進入和退出。 我從來沒有使用過這個,但是快速搜索會在這里這里這里這里顯示信息和示例。

除非你想修改gcc (這是非常重要的!),我認為有兩種相當明顯的方法。

  1. 預處理C代碼本身 - 這並不容易,但也不是非常難。 查找函數的開頭和結尾,並將代碼添加到函數中,然后讓編譯器正確地完成編寫代碼的工作......市場上有很多工具以這種或那種方式執行此操作,各種用途[代碼流分析,分析等]。
  2. 獲取gcc的匯編器輸出並處理它以將代碼添加到那里的函數。 這在某些方面更容易,並且在某些方面更難。 識別函數可能並不困難,但除非插入的匯編代碼完全“安全”,否則“不破壞”匯編代碼可能會更難。

顯然,修改gcc的選項也是可能的,但是編譯器代碼相當復雜,除非你基本上把所有現有的鈎子都用於gprof ,否則我認為它不是一個學校項目 - 除非你正在前往博士或其他一些人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM