Mam aplikację, która tworzy zrzuty segmentu procesów win32 z .text
. Następnie dzieli kod na podstawowe bloki. Blok podstawowy to zestaw instrukcji wykonywanych zawsze jeden po drugim (skoki są zawsze ostatnimi instrukcjami takich podstawowych bloków). Oto przykład:Jak podzielić zdemontowany kod C na funkcje?
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
Teraz chciałbym pogrupować takie podstawowe bloki w funkcje - powiedz, które podstawowe bloki tworzą funkcję. Jaki jest algorytm? Muszę pamiętać, że może być wiele instrukcji ret
w jednej funkcji. Jak wykrywać funkcje fast_call
?