ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
入口掛鉤是程序中每個(gè)函數(shù)進(jìn)入時(shí)調(diào)用的例程。出口掛鉤是每個(gè)函數(shù)退出時(shí)調(diào)用的例程。掛鉤的應(yīng)用包括調(diào)試、跟蹤、分析和檢查棧溢出。使用以下選項(xiàng)啟用入口和出口掛鉤:
| --entry_hook[=name] | 啟用入口掛鉤。若已指定,掛鉤函數(shù)被稱(chēng)為name。否則,默認(rèn)的入口掛鉤函數(shù)名稱(chēng)為 __entry_hook。 |
| --entry_parm{=name| address|none} |
指定掛鉤函數(shù)的參數(shù)。name 參數(shù)指定調(diào)用函數(shù)的名稱(chēng)作為參數(shù)傳遞給掛鉤函數(shù)。在這種情況下,掛鉤函數(shù)的簽名為:void hook(const char *name); address 參數(shù)指定調(diào)用函數(shù)的地址傳遞給掛鉤函數(shù)。在這種情況下,掛鉤函數(shù)的簽名為:void hook(void (*addr)()); none 參數(shù)指定調(diào)用掛鉤函數(shù)時(shí)不帶參數(shù)。這是默認(rèn)設(shè)置。在這種情況下,掛鉤函數(shù)的簽名為:void hook(void); |
| --exit_hook[=name] | 啟用出口掛鉤。若已指定,掛鉤函數(shù)被稱(chēng)為name。否則,默認(rèn)的出口掛鉤函數(shù)名稱(chēng)為 __exit_hook。 |
| --exit_parm{=name| address|none} |
指定掛鉤函數(shù)的參數(shù)。name 參數(shù)指定調(diào)用函數(shù)的名稱(chēng)作為參數(shù)傳遞給掛鉤函數(shù)。在這種情況下,掛鉤函數(shù)的簽名為:void hook(const char *name); address 參數(shù)指定調(diào)用函數(shù)的地址傳遞給掛鉤函數(shù)。在這種情況下,掛鉤函數(shù)的簽名為:void hook(void (*addr)()); none 參數(shù)指定調(diào)用掛鉤函數(shù)時(shí)不帶參數(shù)。這是默認(rèn)設(shè)置。在這種情況下,掛鉤函數(shù)的簽名為:void hook(void); |
掛鉤選項(xiàng)的存在創(chuàng)建了帶有給定簽名的掛鉤函數(shù)的隱式聲明。如果掛鉤函數(shù)的聲明或定義出現(xiàn)在使用這些選項(xiàng)編譯的編譯單元中,則其必須與上面列出的簽名一致。
在 C++ 中,掛鉤聲明為 extern "C"。因此,可以在 C(或匯編)中定義掛鉤,而不必?fù)?dān)心名稱(chēng)改編問(wèn)題。
掛鉤可以聲明為內(nèi)聯(lián),在這種情況下,編譯器會(huì)嘗試使用與其他內(nèi)聯(lián)函數(shù)相同的標(biāo)準(zhǔn)來(lái)內(nèi)聯(lián)這些掛鉤。
入口掛鉤和出口掛鉤是相互獨(dú)立的??梢詥⒂靡粋€(gè)但不啟用另一個(gè),或同時(shí)啟用兩個(gè)。同一個(gè)函數(shù)可以同時(shí)用作入口掛鉤和作出口掛鉤。
必須小心避免對(duì)掛鉤函數(shù)進(jìn)行遞歸調(diào)用。掛鉤函數(shù)不應(yīng)調(diào)用本身插入了掛鉤調(diào)用的任何函數(shù)。為了防止這種情況,不會(huì)為內(nèi)聯(lián)函數(shù)或掛鉤函數(shù)本身生成掛鉤。
可以使用 --remove_hooks_when_inlining 選項(xiàng)刪除優(yōu)化器自動(dòng)內(nèi)聯(lián)的函數(shù)的入口/出口掛鉤。
有關(guān) NO_HOOKS pragma 的信息,請(qǐng)參閱節(jié) 5.11.21。