iOS安全–使用static inline方式編譯函式,防止靜態分析
我們知道一般的函式呼叫都會通過call的方式來呼叫,hacker很容易對一個函式做手腳,如果是以inline的方式編譯的,會把該函式的code拷貝到每次呼叫該函式的地方;而static會讓生成的二進位制檔案中沒有清晰的符號表,讓逆向的人很難弄清楚邏輯
static int isValidate(int id) __attribute__ ((always_inline));
static inline int isValidate(int id);
定義:有函式的結構,但不具備函式的性質,類似於巨集替換。程式碼中使用inline定義,能否形成行內函數,還要看編譯器對行內函數體內部的定義的具體處理
1.使用inline
修飾的函式,在編譯的時候,會把程式碼直接嵌入呼叫程式碼中。就相當於用#define 巨集定義來定義一個add 函式那樣!與#define的區別是:
1)#define定義的格式要有要求,而使用inline則就行平常寫函式那樣,只要加上inline即可!
2)使用#define巨集定義的程式碼,編譯器不會對其進行引數有效性檢查,僅僅只是對符號表進行替換。
3#define巨集定義的程式碼,其返回值不能被強制轉換成可轉換的適合的轉換型別。
2.在inline加上static修飾符
只是為了表明該函式只在該檔案中可見!也就是說,在同一個工程中,就算在其他檔案中也出現同名、同引數的函式也不會引起函式重複定義的錯誤
注意點:
1.檢視main.m的彙編檔案:
選中main.m檔案-->Xcode 選單 --> Product --> Perform Action --> Assemble "main.m"
2.不能使用迴圈語句;不能使用開關語句;不能使用遞迴呼叫;定義在第一次呼叫之前
相關文章
- 編譯靜態庫的方式使用spdlog和fmt編譯
- static靜態方法的使用
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- inline、const、mutable、this、staticinline
- C++靜態函式C++函式
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- Visual Studio 2022 靜態庫編譯編譯
- iOS 常用除錯方法:靜態分析iOS除錯
- 既然編譯器可以判斷一個函式是否適合 inline,那還有必要自己加 inline 關鍵字嗎?編譯函式inline
- Linux下快速靜態編譯Qt以及Qt動態/靜態版本共存Linux編譯QT
- 延遲靜態繫結——static
- 【知識點】inline函式、回撥函式、普通函式inline函式
- 有關Linux的可執行程式——動態編譯、靜態編譯、readelfLinux行程編譯
- 模板函式編譯原理函式編譯原理
- go編譯靜態檔案到exeGo編譯
- ES6中類的靜態方法=> static 的使用
- (譯)函式式 JS #3: 狀態函式JS
- windows下使用mingw和msvc靜態編譯Qt5.15.xxWindows編譯QT
- Sanic static() 方法/函式函式
- 如何使用 Serverless Devs 部署靜態網站到函式計算Serverdev網站函式
- IDA Pro for Mac(靜態反編譯軟體)Mac編譯
- IDA Pro for Mac 靜態反編譯軟體Mac編譯
- JIT-動態編譯與AOT-靜態編譯:java/ java/ JavaScript/Dart亂談編譯JavaScriptDart
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 類內的靜態成員函式函式
- url_for函式與靜態檔案函式
- 在AndroidStudio下使用cmake編譯出靜態連結庫的方法Android編譯
- Java | 靜態巢狀類(Static Nested Class)Java巢狀
- VS在 x64 編譯環境下使用匯編函式編譯函式
- Arm64架構下靜態編譯Nginx架構編譯Nginx
- [譯]Effective Kotlin系列之探索高階函式中inline修飾符(三)Kotlin函式inline
- .Net7 CLR的呼叫函式和編譯函式函式編譯
- QT之靜態函式傳送訊號QT函式
- 實戰iOS-objectivec&swift靜態程式碼分析iOSObjectSwift
- 關於MNN工程框架編譯出來的靜態庫和動態庫的使用框架編譯
- Android逆向之旅---靜態方式分析破解視訊編輯應用「Vue」水印問題AndroidVue
- TDengine 3.0 中如何編譯、建立和使用自定義函式編譯函式
- Flask 配置靜態資原始檔夾static_url_path、static_folderFlask
- 內聯(inline)函式與虛擬函式(virtual)的討論inline函式