KVM_GETU(3KVM) Kernel VM Library Functions KVM_GETU(3KVM)
NAME
kvm_getu, kvm_getcmd - get the u-area or invocation arguments for a
process
SYNOPSIS
cc [
flag... ]
file...
-lkvm [
library...]
#include <kvm.h>
#include <sys/param.h>
#include <sys/user.h>
#include <sys/proc.h>
struct user *kvm_getu(
kvm_t *kd,
struct proc *proc);
int kvm_getcmd(
kvm_t *kd,
struct proc *proc,
struct user *u,
char ***arg,
char ***env);
DESCRIPTION
The
kvm_getu() function reads the u-area of the process specified by
proc to an area of static storage associated with
kd and returns a
pointer to it. Subsequent calls to
kvm_getu() will overwrite this
static area.
The
kd argument is a pointer to a kernel descriptor returned by
kvm_open(3KVM). The
proc argument is a pointer to a copy in the
current process's address space of a
proc structure, obtained, for
instance, by a prior
kvm_nextproc(3KVM) call.
The
kvm_getcmd() function constructs a list of string pointers that
represent the command arguments and environment that were used to
initiate the process specified by
proc.
The
kd argument is a pointer to a kernel descriptor returned by
kvm_open(3KVM). The
u argument is a pointer to a copy in the current
process's address space of a
user structure, obtained, for instance,
by a prior
kvm_getu() call. If
arg is not
NULL, the command line
arguments are formed into a null-terminated array of string pointers.
The address of the first such pointer is returned in
arg. If
env is
not
NULL, the environment is formed into a null-terminated array of
string pointers. The address of the first of these is returned in
env.
The pointers returned in
arg and
env refer to data allocated by
malloc() and should be freed by a call to
free() when no longer
needed. See
malloc(3C). Both the string pointers and the strings
themselves are deallocated when freed.
Since the environment and command line arguments might have been
modified by the user process, there is no guarantee that it will be
possible to reconstruct the original command at all. The
kvm_getcmd() function will make the best attempt possible, returning
-1 if the user process data is unrecognizable.
RETURN VALUES
On success,
kvm_getu() returns a pointer to a copy of the u-area of
the process specified by
proc. On failure, it returns
NULL.
The
kvm_getcmd() function returns 0 on success and -1 on failure. If
-1 is returned, the caller still has the option of using the command
line fragment that is stored in the u-area.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Stable |
+--------------------+-----------------+
|MT-Level | Unsafe |
+--------------------+-----------------+
SEE ALSO
malloc(3C),
kvm_kread(3KVM),
kvm_nextproc(3KVM),
kvm_open(3KVM),
libkvm(3LIB),
attributes(7)NOTES
On systems that support both 32-bit and 64-bit processes, the 64-bit
implementation of
libkvm ensures that the
arg and
env pointer arrays
for
kvm_getcmd() are translated to the same form as if they were
64-bit processes. Applications that wish to access the raw 32-bit
stack directly can use
kvm_uread(). See
kvm_read(3KVM).
May 2, 2002 KVM_GETU(3KVM)