跳到主要內容

發表文章

精選

[C++] 優雅玩耍函數指標呼叫,把你同事玩弄得嫑嫑的。(離職前記得回顧這篇文)

前言 最近正好寫一些玩具想模組化,以前在處理 Function Pointer 都是強轉型 + typedef 然後 ^C^V 瘋狂複製貼上函數型別來做到 C/C++ 內對指標函數呼叫。最近正好摸到一些 C++11 有支援到的正規轉型別方式,發現乾...XD 不用在手殘複製貼上啦,原來 C++11 一堆關鍵字已經可以讓你快速定義型別 + 把函數模組化放到自己的樣板內了超ㄎㄧㄤ
btw 這篇只是筆記文,最一開始我只是想查 C/C++ 內到底能不能編譯時期就取得函數的型別XDDDD(結果是:幹,居然真的可以咧XDDDDD)
#murmur 如果看完這篇文還是不懂怎麼做,那就算惹,我也沒很認真想解釋細節,不要太認真XD(只是覺得分頁欄有點滿,寫到部落格來不要佔 Chrome 的分頁,反正我看了哪些參考文獻都附在底下了)
另外,這篇都在講 Windows 上的做法,不過理論上把 LoadLibrary 跟 GetProcAddress 替換為對應 macOS/Linux 的函數應該都可以 work(N 年前好像有玩一下 macOS 上是可以跑的) 考.考.考.考考古學家  可以先參考這篇 [C++] How to GetProcAddress() like a boss  裡面純 C 寫法的強轉型函數指標做法,這相信常玩函數指標的人都有用過這樣玩法:
原理就只是: 宣告一個新的函數型別 ShellAboutProc,型別、呼叫約制跟你想呼叫的系統函數必須一致(對啦,不然等等堆疊爛掉你就知道惹)接著透過 LoadLibrary() 載入系統函數模組取得模組地址、透過 GetProcAddress() 取得該函數位於該函數庫上真正地址以 ShellAboutProc 函數型別宣告一個變數 shellAbout最後將該函數地址強轉型為我們定義好的 ShellAboutProc 型別覆寫入 shellAbout 變數內,大功告成 la,shellAbout 變數就可以被當原生函數呼叫了 這做法超簡單、也實用,不過看也知道一堆地方可以省略XD,比方說根本不需要額外開一個變數來暫存函數指標,可以直接用內聯函數型態的方式、取代宣告函數型別與變數(離題惹)

最新文章

IDA 神器深色主題套用教學,快讓你的 IDA 潮到出水吧!

[TDOHConf] Challenge #11: fuzz macOS 算號器

Windows x86 LoadLibraryA Shellcode(Null-Free)

AIS3 Final-Exam Binary1