server: Add hooks to support process tracing mechanisms other than ptrace.
This commit is contained in:
parent
48b74b3237
commit
cd1c7fc056
@ -284,6 +284,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
|
|||||||
process->winstation = 0;
|
process->winstation = 0;
|
||||||
process->desktop = 0;
|
process->desktop = 0;
|
||||||
process->token = token_create_admin();
|
process->token = token_create_admin();
|
||||||
|
process->trace_data = 0;
|
||||||
list_init( &process->thread_list );
|
list_init( &process->thread_list );
|
||||||
list_init( &process->locks );
|
list_init( &process->locks );
|
||||||
list_init( &process->classes );
|
list_init( &process->classes );
|
||||||
@ -343,6 +344,7 @@ data_size_t init_process( struct thread *thread )
|
|||||||
struct process *process = thread->process;
|
struct process *process = thread->process;
|
||||||
struct startup_info *info = process->startup_info;
|
struct startup_info *info = process->startup_info;
|
||||||
|
|
||||||
|
init_process_tracing( process );
|
||||||
if (!info) return 0;
|
if (!info) return 0;
|
||||||
return info->data_size;
|
return info->data_size;
|
||||||
}
|
}
|
||||||
@ -599,6 +601,7 @@ static void process_killed( struct process *process )
|
|||||||
destroy_process_classes( process );
|
destroy_process_classes( process );
|
||||||
remove_process_locks( process );
|
remove_process_locks( process );
|
||||||
set_process_startup_state( process, STARTUP_ABORTED );
|
set_process_startup_state( process, STARTUP_ABORTED );
|
||||||
|
finish_process_tracing( process );
|
||||||
start_sigkill_timer( process );
|
start_sigkill_timer( process );
|
||||||
wake_up( &process->obj, 0 );
|
wake_up( &process->obj, 0 );
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ struct process
|
|||||||
struct list dlls; /* list of loaded dlls */
|
struct list dlls; /* list of loaded dlls */
|
||||||
void *peb; /* PEB address in client address space */
|
void *peb; /* PEB address in client address space */
|
||||||
void *ldt_copy; /* pointer to LDT copy in client addr space */
|
void *ldt_copy; /* pointer to LDT copy in client addr space */
|
||||||
|
unsigned int trace_data; /* opaque data used by the process tracing mechanism */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct process_snapshot
|
struct process_snapshot
|
||||||
@ -128,6 +129,10 @@ extern void detach_debugged_processes( struct thread *debugger );
|
|||||||
extern struct process_snapshot *process_snap( int *count );
|
extern struct process_snapshot *process_snap( int *count );
|
||||||
extern struct module_snapshot *module_snap( struct process *process, int *count );
|
extern struct module_snapshot *module_snap( struct process *process, int *count );
|
||||||
extern void enum_processes( int (*cb)(struct process*, void*), void *user);
|
extern void enum_processes( int (*cb)(struct process*, void*), void *user);
|
||||||
|
|
||||||
|
extern void init_tracing_mechanism(void);
|
||||||
|
extern void init_process_tracing( struct process *process );
|
||||||
|
extern void finish_process_tracing( struct process *process );
|
||||||
extern int read_process_memory( struct process *process, const void *ptr, data_size_t size, char *dest );
|
extern int read_process_memory( struct process *process, const void *ptr, data_size_t size, char *dest );
|
||||||
extern int write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src );
|
extern int write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src );
|
||||||
|
|
||||||
|
@ -223,6 +223,23 @@ static inline int tkill( int tgid, int pid, int sig )
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* initialize the process tracing mechanism */
|
||||||
|
void init_tracing_mechanism(void)
|
||||||
|
{
|
||||||
|
/* no initialization needed for ptrace */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize the per-process tracing mechanism */
|
||||||
|
void init_process_tracing( struct process *process )
|
||||||
|
{
|
||||||
|
/* ptrace setup is done on-demand */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* terminate the per-process tracing mechanism */
|
||||||
|
void finish_process_tracing( struct process *process )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/* send a Unix signal to a specific thread */
|
/* send a Unix signal to a specific thread */
|
||||||
int send_thread_signal( struct thread *thread, int sig )
|
int send_thread_signal( struct thread *thread, int sig )
|
||||||
{
|
{
|
||||||
|
@ -800,6 +800,9 @@ void open_master_socket(void)
|
|||||||
|
|
||||||
/* init startup time */
|
/* init startup time */
|
||||||
gettimeofday( &server_start_time, NULL );
|
gettimeofday( &server_start_time, NULL );
|
||||||
|
|
||||||
|
/* init the process tracing mechanism */
|
||||||
|
init_tracing_mechanism();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* master socket timer expiration handler */
|
/* master socket timer expiration handler */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user