Hi all,

In my project (win32) I need to estimate the number of machine code bytes  of a 
certain function.
The most straightforward option was to look for $c3 which is ret, and it worked 
on optimization levels O0 and O1. O2 and O3 seem to prefer $c2 $04 $00 (retn 4) 
instead.
Then here comes win64, where the function end is marked by $c3 (ret) regardless 
of optimization level.
And it turned out the opcode for mov eax,ebx also has $c3 in it.
For now, I use O3 level and patterns $c2 $04 $00 and $5d c3 00 (pop rbp, ret) 
for win32 and win64 respectively, in hope that the function is always geting 
padded to (but not equal to) nearest $20 in size.
This is far from deploying a full-fledged disassembler but is still not simple 
and elegant solution.
I remember back in TP days there were methods for this, by using labels and 
addressing them with absolute keyword to obtain offset delta.
I wonder if some similar trick can be used here, or if there are some built-in 
function to do just that?
Thanks in advance.

// Gennadiy

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to