使用uf命令将一个函数的反汇编代码都给列出来,即便代码不连续也可以列出来,想问一下uf命令是如何做到的。
比如:
0: kd> uf KeInitializeApcnt!KeInitializeApc:804e6c69 8bff mov edi,edi804e6c6b 55 push ebp804e6c6c 8bec mov ebp,esp804e6c6e 8b4508 mov eax,dword ptr [ebp+8]804e6c71 8b5510 mov edx,dword ptr [ebp+10h]804e6c74 83fa02 cmp edx,2804e6c77 8b4d0c mov ecx,dword ptr [ebp+0Ch]804e6c7a 66c7001200 mov word ptr [eax],12h804e6c7f 66c740023000 mov word ptr [eax+2],30h804e6c85 0f846d0f0000 je nt!KeInitializeApc+0x1e (804e7bf8)
nt!KeInitializeApc+0x24:804e6c8b 894808 mov dword ptr [eax+8],ecx804e6c8e 8b4d14 mov ecx,dword ptr [ebp+14h]804e6c91 894814 mov dword ptr [eax+14h],ecx804e6c94 8b4d18 mov ecx,dword ptr [ebp+18h]804e6c97 88502c mov byte ptr [eax+2Ch],dl804e6c9a 894818 mov dword ptr [eax+18h],ecx804e6c9d 8b4d1c mov ecx,dword ptr [ebp+1Ch]804e6ca0 33d2 xor edx,edx804e6ca2 3bca cmp ecx,edx804e6ca4 89481c mov dword ptr [eax+1Ch],ecx804e6ca7 0f85c2010000 jne nt!KeInitializeApc+0x42 (804e6e6f)
nt!KeInitializeApc+0x50:804e6cad 88502d mov byte ptr [eax+2Dh],dl804e6cb0 895020 mov dword ptr [eax+20h],edx
nt!KeInitializeApc+0x56:804e6cb3 88502e mov byte ptr [eax+2Eh],dl804e6cb6 5d pop ebp804e6cb7 c22000 ret 20h
nt!KeInitializeApc+0x42:804e6e6f 8a4d20 mov cl,byte ptr [ebp+20h]804e6e72 88482d mov byte ptr [eax+2Dh],cl804e6e75 8b4d24 mov ecx,dword ptr [ebp+24h]804e6e78 894820 mov dword ptr [eax+20h],ecx804e6e7b e933feffff jmp nt!KeInitializeApc+0x56 (804e6cb3)
nt!KeInitializeApc+0x1e:804e7bf8 8a9165010000 mov dl,byte ptr [ecx+165h]804e7bfe e988f0ffff jmp nt!KeInitializeApc+0x24 (804e6c8b)
ret 20h后面的804e6e6f和804e7bf8 开始的两处代码跟前面的代码就不连续内存中的,uf命令也可以识别出来。请问uf是如何识别的?通过解析跳转指令发现的?还是符号文件有什么标记信息?
没注意distorm还有这功能。
flow control instructions在哪里设置呢?distorm_decode没有设置的选项啊, distorm_decompose函数没有用过,楼上的兄弟有用过吗?