ollydbg runtrace has a profiling option inbuilt
it can profile the runtrace either module wise
or globally
go to run trace window (...)icon
right click and select profile module
or global profile
a simple messagebox.exe (iczelions tutorial 2) will execute 1087946
instructions from system breakpoint to original entry point skipping string commands repmovsb ... movsd
in xpsp3
Run trace, selected line
Back=1087946.
Thread=Main
Module=ntdll
Address=7C90120F
Command=RETN
Modified registers=ESP=0013FB24
and call _LdrSnapThunk about 1000 times
Profile of whole memory, item 30
Count=1012.
Address=7C917BF1 LdrpSnapThunk
First command=MOV EDI, EDI
will call zwCreateFile 4 times
Profile of whole memory, item 1046
Count=4.
Address=7C90D0AE ZwCreateFile
First command=MOV EAX, 25
from this global profile you can hop back to disassembly window
or run trace window
mark this position in run trace window
and jump to next marked position
the details of 4 ZwCreateFile
from global profile to runtrace window correlated below
Run trace, selected line
Back=978309. <-------------------
Thread=Main
Module=ntdll
Address=7C90D0AE ZwCreateFile
Command=MOV EAX, 25
Modified registers=EAX=00000025
Run trace, selected line
Back=975485. <----------------------
Thread=Main
Module=ntdll
Address=7C90D0AE ZwCreateFile
Command=MOV EAX, 25
Modified registers=EAX=00000025
Run trace, selected line
Back=956331. <-----------------------
Thread=Main
Module=ntdll
Address=7C90D0AE ZwCreateFile
Command=MOV EAX, 25
Modified registers=EAX=00000025
Run trace, selected line
Back=874497. <----------------------
Thread=Main
Module=ntdll
Address=7C90D0AE ZwCreateFile
Command=MOV EAX, 25
Modified registers=EAX=00000025