×
UNIX.COM Login
Username:
Password:  
Show Password






👤


Programming

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 Display Modes
    #1  
Old 02-10-2005
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 02-10-2005
Neo's Unix or Linux Image
Neo Neo is online now Forum Staff  
Administrator
 
Join Date: Sep 2000
Last Activity: 16 July 2018, 8:32 AM EDT
Location: Asia pacific region
Posts: 14,535
Thanks: 1,025
Thanked 1,426 Times in 690 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 02-11-2005
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 15 July 2018, 10:19 PM EDT
Location: NM
Posts: 11,435
Thanks: 636
Thanked 1,174 Times in 1,081 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 02-11-2005
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 02-11-2005
Neo's Unix or Linux Image
Neo Neo is online now Forum Staff  
Administrator
 
Join Date: Sep 2000
Last Activity: 16 July 2018, 8:32 AM EDT
Location: Asia pacific region
Posts: 14,535
Thanks: 1,025
Thanked 1,426 Times in 690 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 02-11-2005
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: 63
Thanked 474 Times in 272 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 02-11-2005
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
👤 Login to reply

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
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



All times are GMT -4. The time now is 08:33 AM.

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