symbol是c语言标识符,symbol的理解
前言
在計算機中,一個函數的指令被存放在一段內存中,當進程需要執行這個函數的時候,它必須知道要去內存的哪個地方找到這個函數,然后執行它的指令。也就是說,進程要根據這個函數的名稱,找到它在內存中的地址,而這個名稱與地址的映射關系,是存儲在 “symbol table”中。
——“symbol table”中的 symbol 就是這個函數的名稱,進程會根據這個 symbol 找到它在內存中的地址,然后跳轉過去執行。
正文
為了避免其他app利用symbol,執行其他app庫的函數
symbol 被分為2類 :
即 public symbol 和private symbol 。( 第三類 stripped symbol)
MSHookFunction
MSHookFunction 作用于 C 和C++ 函數 ,通過編寫匯編指令,在進行執行到 function 時 轉而執行 replacement,同時保存在 function 的指令及其返回地址,使得用戶可以選擇性的執行 function ,并保證進程能夠在執行完 replacement 后 繼續正常運行。
ps: CydiaSubstrate(由MobileHooker、 MobileLoader 、Safe mode組成) 是對MSHookMessageEx進行封裝。
iOS 的底層是用 C C++ 實現的,編譯之后生成的大都是 subroutine, class-dump 拿它沒辦法,只能使用IDA 工具。——- 因此在OC 開發中使用C 語言實現算法相關的功能,代碼更具安全性。
MSFindSymbol
void *MSFindSymbol(MSImageRef image, const char *name);
MSImageRef image;
image = MSGetImageByName("/usr/lib/libSystem.B.dylib");
void *(*palloc)(size_t);
palloc = (void *(*)(size_t)) MSFindSymbol(image, "_malloc");
void *data = (*palloc)(1024);
free(data);
symbol的來源
這些 symbol通常由 IDA 對二進制文件的分析結果中提取。
symbol 跟函數名不同。
總結
以上是生活随笔為你收集整理的symbol是c语言标识符,symbol的理解的全部內容,希望文章能夠幫你解決所遇到的問題。