Unix/Linux Go Back    


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

How to Find who is calling me?

Programming


Closed    
 
Thread Tools Search this Thread Display Modes
    #1  
Old Unix and Linux 02-10-2005   -   Original Discussion by uxbala
uxbala uxbala is offline
Registered User
 
Join Date: Feb 2005
Last Activity: 15 February 2008, 11:00 AM EST
Posts: 8
Thanks: 0
Thanked 0 Times in 0 Posts
Bug How to Find who is calling me?

Hi,

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
Balasubramanian.
Sponsored Links
    #2  
Old Unix and Linux 02-11-2005   -   Original Discussion by uxbala
Neo's Unix or Linux Image
Neo Neo is online now Forum Staff  
Administrator
 
Join Date: Sep 2000
Last Activity: 19 November 2017, 12:04 AM EST
Location: Asia pacific region
Posts: 13,904
Thanks: 898
Thanked 1,241 Times in 583 Posts
Can you use strace ?


Code:
STRACE(1)                                               STRACE(1)

NAME
       strace - trace system calls and signals

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

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

DESCRIPTION
       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?
Sponsored Links
    #3  
Old Unix and Linux 02-11-2005   -   Original Discussion by uxbala
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 18 November 2017, 3:16 PM EST
Location: NM
Posts: 11,239
Thanks: 570
Thanked 1,116 Times in 1,030 Posts
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 Unix and Linux 02-11-2005   -   Original Discussion by uxbala
uxbala uxbala is offline
Registered User
 
Join Date: Feb 2005
Last Activity: 15 February 2008, 11:00 AM EST
Posts: 8
Thanks: 0
Thanked 0 Times in 0 Posts
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,
Balasubramanian
Sponsored Links
    #5  
Old Unix and Linux 02-11-2005   -   Original Discussion by uxbala
Neo's Unix or Linux Image
Neo Neo is online now Forum Staff  
Administrator
 
Join Date: Sep 2000
Last Activity: 19 November 2017, 12:04 AM EST
Location: Asia pacific region
Posts: 13,904
Thanks: 898
Thanked 1,241 Times in 583 Posts
Quote:
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.
Sponsored Links
    #6  
Old Unix and Linux 02-11-2005   -   Original Discussion by uxbala
Perderabo's Unix or Linux Image
Perderabo Perderabo is offline Forum Advisor  
Unix Daemon (Administrator Emeritus)
 
Join Date: Aug 2001
Last Activity: 26 February 2016, 12:31 PM EST
Location: Ashburn, Virginia
Posts: 9,930
Thanks: 64
Thanked 471 Times in 271 Posts
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:
function1("main")
function1("function2")
as needed. function1 would refer to the first argument to find the caller.
Sponsored Links
    #7  
Old Unix and Linux 02-11-2005   -   Original Discussion by uxbala
uxbala uxbala is offline
Registered User
 
Join Date: Feb 2005
Last Activity: 15 February 2008, 11:00 AM EST
Posts: 8
Thanks: 0
Thanked 0 Times in 0 Posts
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.
Balasubramanian.
Sponsored Links
Closed

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Shell script calling Perl function, sort and find data, write to new files kowit010 Homework & Coursework Questions 6 11-02-2011 10:39 PM
Calling awk fom csh kristinu Shell Programming and Scripting 1 10-18-2010 08:08 PM
Calling awk from csh kristinu Shell Programming and Scripting 2 06-29-2010 06:09 PM
Calling a URL jmcdaniel UNIX for Dummies Questions & Answers 6 11-23-2005 03:48 AM
i am trying to find out who is calling me gail Security 2 07-09-2005 07:48 PM



All times are GMT -4. The time now is 01:04 AM.