[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    Re: Path to executable of current process?
From:       Peter Jeremy <peterjeremy () optushome ! com ! au>
Date:       2007-07-20 11:12:09
Message-ID: 20070720111209.GV1176 () turion ! vk2pj ! dyndns ! org
[Download RAW message or body]


On 2007-Jul-19 22:00:23 -0400, Michael B Allen <ioplex@gmail.com> wrote:
>Well I figured out how to get kvm_getargv working. Unfortunately it
>seems only root can call kvm_open so the faulting process can't
>backtrace unless it so happens to be running as root (which it's not).
>
>Is there any way to get argv[0] for the current process without being root?

I suggest you have a look at the source to ps - it does not run with
elevated privileges.

Note that argv[0] is not necessarily a full pathname - it is whatever
the program was invoked with.  Even if it _is_ a full pathname, there
is no guarantee that it points to the same object - the executable may
be in a chroot environment or that pathname may have been replaced.

The only guaranteed way to access the executable associated with a
running process is via procfs.  As you point out earlier, this is
not mounted by default on FreeBSD because none of the base system
utilities need it (apart from 'ps -e') - you will need to arrange
for it to be mounted.

On 2007-Jul-19 23:23:45 -0400, Michael B Allen <ioplex@gmail.com> wrote:
>After more digging I see sysctl seems to be the way to do this but can I 
>get the full path to the executable form kinfo_proc?
>
>How does ps do this?

It uses kvm_getargv(3). If you want to do it directly via sysctl(2),
I suggest you examine /usr/src/lib/libkvm/kvm_proc.c.

>   mib[2] = KERN_PROC_PID;
This should be KERN_PROC_ARGS

>   len = sizeof(struct kinfo_proc);
>   if (sysctl(mib, 4, &ki_proc, &len, NULL, 0) == -1)

And the buffer argument should be char[], not struct kinfo_proc.

-- 
Peter Jeremy

[Attachment #3 (application/pgp-signature)]

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic