我們知道一般的函數(shù)調(diào)用都會通過call的方式來調(diào)用,這樣讓攻擊很容易對一個函數(shù)做手腳,如果是以inline的方式編譯的會,會把該函數(shù)的code拷貝到每次調(diào)用該函數(shù)的地方。而static會讓生成的二進(jìn)制文件中沒有清晰的符號表,讓逆向的人很難弄清楚邏輯。
下面我們來看看一個普通函數(shù)及其反匯編代碼:

編譯,反匯編結(jié)果如下:

Snip20150118_6
這樣可以很明顯的看到isValidate的調(diào)用,而且很容易使用斷點+commands的方法讓其始終返回1.
下面使用inline的方式來編譯:
int isValidate(int id) __attribute__ ((always_inline));
編譯,反匯編結(jié)果如下:

Snip20150118_7
在每次調(diào)用的時候都會把代碼拷貝一次。
再來看看static inline的方式來編譯的反匯編代碼:

現(xiàn)在沒有符號表了。