On 24.04.2011 13:49, Rainer Stratmann wrote:
Am Sunday 24 April 2011 12:45:50 schrieb Sven Barth:
On 24.04.2011 12:14, Rainer Stratmann wrote:
Am Sunday 24 April 2011 11:44:18 schrieb Rainer Stratmann:
How to find the return adress of the calling code of a
procedure/function?

Where in the stack is the information to the return adress?

stack + - x?

asm
   mov eax , [ ebp + 4 ]
end;

eax is the return adress

This will only work on i386 and might even work only with certain
calling conventions (don't know exactly whether other calling
conventions on i386 don't use EAX for the result value).

How to acess to the information in assembler?
Is it in every processor architecture possible, for example ARM?
(actually 80x86).
Is it different in 32 / 64 bit?

Why don't you try this:
http://www.freepascal.org/docs-html/rtl/system/get_caller_addr.html

Because I didn't know before :-)


A good reason :P

function get_caller_addr( framebp : pointer ) : pointer;

What does framepb mean?

The usual usage in the sources of the RTL is "get_caller_addr(get_frame)" (get_frame is linked in the document I linked to in the last mail). Get_frame returns the frame address of the current function/procedure/method. Thus "get_caller_addr(get_frame)" will return the return address to the calling function.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to