Home Man
Today's Posts

Post questions about C, C++, Java, SQL, and other programming languages here.

How to Find who is calling me?


Login to Reply

Thread Tools Search this Thread
# 1  
Old 02-10-2005
Bug How to Find who is calling me?


I was trying to find from the function which is called by some other function but is it possiable by the calling funcation that who is calling me? For example

int function1()
// do something
return 0 ;

char function2()
// do something
function1() ; // is function2 knows function2 is calling me?
return '' ;

int main()
function1() ; // is function1 knows I called by main?
return 0 ;

by doing this we can able to track the program but this facility is there when we use debugger or when we debug our code but how to do that programatically I am not sure unix has stack tracing facility.

any help regarding this?

Thanks in advance
# 2  
Old 02-10-2005
Can you use strace ?

STRACE(1)                                               STRACE(1)

       strace - trace system calls and signals

       strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...  [ -ofile ] [ -ppid
       ] ...  [ -sstrsize ] [ -uusername ] [ command [ arg ...  ] ]

       strace -c [ -eexpr ] ...  [ -Ooverhead ] [ -Ssortby ] [ command [ arg  ...
       ] ]

       In the simplest case strace runs the specified command until it exits.  It
       intercepts and records the system calls which are called by a process  and
       the  signals  which  are  received  by a process.  The name of each system
       call, its arguments and its return value are printed on standard error  or
       to the file specified with the -o option.

       strace  is a useful diagnostic, instructional, and debugging tool.  System
       adminstrators, diagnosticians and trouble-shooters will find it invaluable
       for  solving  problems  with  programs for which the source is not readily
       available since they do not need to be recompiled in order to trace  them.
       Students,  hackers  and the overly-curious will find that a great deal can
       be learned about a system and its system calls by  tracing  even  ordinary
       programs.   And  programmers will find that since system calls and signals
       are events that happen at the user/kernel interface, a  close  examination
       of  this  boundary  is  very useful for bug isolation, sanity checking and
       attempting to capture race conditions.

... more available on man page

Or, did I misunderstand your question?
# 3  
Old 02-11-2005
OP wants to know if a function can do a stack crawl to find the address of the calling function - I do not know how.
# 4  
Old 02-11-2005
Thanks for your reply, I am not sure how to use strace? also I am not sure strace will give me the flow or sequence I am expecting from any program. I am looking for the function which is already available in Java called getStackTrace similarly if we have any things to do in C/C++ or any easy way to do that.

Thanks for your help,
# 5  
Old 02-11-2005
Originally Posted by jim mcnamara
OP wants to know if a function can do a stack crawl to find the address of the calling function - I do not know how.
Does the OP mean the address of the CPU stack pointers? If so, I don't think this is available at the OS level. That is why, as I recall (it has been many years), there are "buffer overflows" and similar security issues, because the OS and application does not have direct visibility into the addresses of the CPU H/W stack.
# 6  
Old 02-11-2005
The OP doesn't want an address at all. Inside function1, he wants to do something and get either "function2" or "main" as the result, depending on which of those called him. This might mean obtaining the the returm address as an intermediate result and then scanning a symbol table, but the address is not the objective. This would only be doable if the program was compiled with symbolic debugging information included as for use with a symbolic debugger like gdb. I'm not going to try something that daunting for such a minor result.

If I really needed that, I would expand the argument list of the function1 module to contain a field called "caller". Then I use:
as needed. function1 would refer to the first argument to find the caller.
# 7  
Old 02-11-2005
Is this way you don't think its kind of hard codeing? I am asking for the generic solution so that we can use for all of our programs without opening the file mens with out analysing the file we can know what are all the functions availabe and in what sequence its called like that. those functionality already available in Rational Rose when we reverse engineering the project it will generate sequence diagram those applications will read our project and generate it but we are developing the application like similar to that.

Thanks for your reply.
Login to Reply

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Calling subscript with sh vs. ksh derndingle UNIX for Beginners Questions & Answers 5 12-06-2017 05:42 PM
find -exec How to add additional parameter when calling a funtion jcdole Shell Programming and Scripting 5 10-10-2017 08:50 AM
Calling a find/remove within a script jeffs42885 Shell Programming and Scripting 9 05-16-2017 02:51 PM
How does calling it .sh help? triplemaya Shell Programming and Scripting 8 05-23-2013 06:30 AM
Shell script calling Perl function, sort and find data, write to new files kowit010 Homework & Coursework Questions 6 11-02-2011 09:39 PM
Calling awk fom csh kristinu Shell Programming and Scripting 1 10-18-2010 07:08 PM
Calling awk from csh kristinu Shell Programming and Scripting 2 06-29-2010 05:09 PM
Calling a URL jmcdaniel UNIX for Dummies Questions & Answers 6 11-23-2005 02:48 AM
i am trying to find out who is calling me gail Security 2 07-09-2005 06:48 PM
Calling a script from another dnkansah Shell Programming and Scripting 5 09-02-2004 07:02 AM

All times are GMT -4. The time now is 12:20 AM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
Show Password