(a)
int foo(int x, int y) {
while (b(x,y))
if (c(x,y))
return 1;
return 0;
}
(b)
004011F0 @foo@8:
004011F0 56 push esi
004011F1 57 push edi
004011F2 8BF2 mov esi,edx
004011F4 8BF9 mov edi,ecx
004011F6 E869FEFFFF call fn_00401064 ; _b
004011FB 85C0 test eax,eax
004011FD 741A jz loc_00401219
004011FF loc_004011FF:
004011FF 8BD6 mov edx,esi
00401201 8BCF mov ecx,edi
00401203 E857FEFFFF call fn_0040105F ; _c
00401208 85C0 test eax,eax
0040120A 7512 jnz loc_0040121E
0040120C 8BD6 mov edx,esi
0040120E 8BCF mov ecx,edi
00401210 E84FFEFFFF call fn_00401064 ; _b
00401215 85C0 test eax,eax
00401217 75E6 jnz loc_004011FF
00401219 loc_00401219:
00401219 5F pop edi
0040121A 33C0 xor eax,eax
0040121C 5E pop esi
0040121D C3 ret
0040121E loc_0040121E:
0040121E 5F pop edi
0040121F B801000000 mov eax,1
00401224 5E pop esi
00401225 C3 ret
(c)
call,test,jz,loc,call,test,jnz,call,test,jnz,loc,xor,ret,loc,ret
(d)
EEC1E2A53DA3D4FCF3E57850F302412D
(e)
int bar(int x, int y, int z) {
while (g(x,y,666))
if (h(1234,x,y))
return 1;
return 0;
}
Figure 1: (a) A small C function; (b) disassembly of a compiled version; (c) its opstring; (d) its function digest; (e) and a slightly different C function that yields the same opstring and function digest.
Back to Article