xref: /titanic_52/usr/src/man/man3kvm/kvm_getu.3kvm (revision d1515e527c5d324d2c75e58781f1dd47f18624d8)
te
Copyright (c) 1997, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
KVM_GETU 3KVM "May 2, 2002"
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(5) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
Interface Stability Stable
MT-Level Unsafe
SEE ALSO

kvm_nextproc(3KVM), kvm_open(3KVM), kvm_kread(3KVM), malloc(3C), libkvm(3LIB), attributes(5)

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