我有一個應用程序創建了.text
段轉儲的win32進程。然後它將代碼分爲基本塊。基本程序塊是一組接一個地執行的指令(跳轉總是這些基本程序塊的最後一條指令)。下面是一個例子:如何將反彙編的C代碼分解爲函數?
Basic block 1
mov ecx, dword ptr [ecx]
test ecx, ecx
je 00401013h
Basic block 2
mov eax, dword ptr [ecx]
call dword ptr [eax+08h]
Basic block 3
test eax, eax
je 0040100Ah
Basic block 4
mov edx, dword ptr [eax]
push 00000001h
mov ecx, eax
call dword ptr [edx]
Basic block 5
ret 000008h
現在我想將這些基本塊組合在函數中 - 說哪些基本塊形成函數。算法是什麼?我必須記住,在一個函數內可能有很多ret
指令。如何檢測fast_call
的功能?