你是獲取整個函式的長度還是僅僅獲取函式頭一行asm程式碼的長度,一行asm很簡單,看雪滿天飛的長度計算,當然沒人寫支援S****X的,不過我沒見過哪個函式頭就是MMX\SSE指令的。。。編譯器也不可能生成這種指令,要有也絕對是人為的。。要獲取整個函式的長度呢,這就有點麻煩了,因為一個函式可能有N個RET的地方,Win7開始系統的API更是跳來跳去,也許一個API的函式RET壓根不在你看到的函式頭下面。。。如果簡單的確認函式長度的話,對大多數匯出、未匯出函式,只需要從函式頭向下memcmp這個就行了:
NOP
MOV EDI,EDI
如果是獲取那種非系統函式,你還是老實IDA拿特徵碼,進行動態搜尋,或者用反彙編引擎一行一行分析,不過對那種JMP無數的函式來說(如跳陣列函式表那種),別說你,就算是IDA的引擎,也得2。靜態有時候難以完成很多工,更多時候還是動態獲取資訊,當然這要扯到硬編碼相容性的問題
你是獲取整個函式的長度還是僅僅獲取函式頭一行asm程式碼的長度,一行asm很簡單,看雪滿天飛的長度計算,當然沒人寫支援S****X的,不過我沒見過哪個函式頭就是MMX\SSE指令的。。。編譯器也不可能生成這種指令,要有也絕對是人為的。。要獲取整個函式的長度呢,這就有點麻煩了,因為一個函式可能有N個RET的地方,Win7開始系統的API更是跳來跳去,也許一個API的函式RET壓根不在你看到的函式頭下面。。。如果簡單的確認函式長度的話,對大多數匯出、未匯出函式,只需要從函式頭向下memcmp這個就行了:
NOP
NOP
NOP
NOP
NOP
MOV EDI,EDI
如果是獲取那種非系統函式,你還是老實IDA拿特徵碼,進行動態搜尋,或者用反彙編引擎一行一行分析,不過對那種JMP無數的函式來說(如跳陣列函式表那種),別說你,就算是IDA的引擎,也得2。靜態有時候難以完成很多工,更多時候還是動態獲取資訊,當然這要扯到硬編碼相容性的問題