我有一个创建.text
win32 进程段转储的应用程序。然后它将代码划分为基本块。基本块是一组指令,它们总是一个接一个地执行(跳转总是这些基本块的最后一条指令)。这是一个例子:
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
功能?