opensubscriber
   Find in this group all groups
 
Unknown more information…

f : fpc-pascal@lists.freepascal.org 11 August 2012 • 7:40PM -0400

[fpc-pascal] Get all caller adresses of a given function/procedure before executing
by Rainer Stratmann

REPLY TO AUTHOR
 
REPLY TO GROUP




The code below finds all caller adresses in a program to a known
procedure/function adress.
With this I can get all caller adresses to the translate function.

Moreover - with another piece of code (not shown here) I got also the text
snippets itself, because they are loaded immediately before executing the
translate function with MOV textsnippetadr , EAX.

procedure i_realy_know_what_i_am_doing( p_opcode : pbyte ; count : longint ;
proc_adr : pointer );
const
call_opcode = $e8;
caller_adr_pc_offset = 5;
var
p_reladress : pdword; // call works with a relative adress after the opcode
x , caller_adress , jmp_adr_abs : dword;
begin
for x := 1 to count do begin
  if p_opcode^ = call_opcode then begin
   p_reladress := pdword( p_opcode + 1 );                       // after
opcode = relative adress to procedure/function to call
   caller_adress := dword( p_opcode + caller_adr_pc_offset );
   jmp_adr_abs := caller_adress + p_reladress^;                 // absolute
adress = programcounter + 5 + relative adress
   if jmp_adr_abs = dword( proc_adr )
    then add_caller_adress_to_table( caller_adress );           // if call
proc_adr then found!
  end;
  inc( p_opcode );
end;
end;
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@list...
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.