Added support for ReadProcessMemory through the server.
diff --git a/server/trace.c b/server/trace.c
index 1af1367..ff49ed9 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -11,14 +11,35 @@
#include "request.h"
+/* utility functions */
+
+static void dump_ints( const int *ptr, int len )
+{
+ fputc( '{', stderr );
+ while (len)
+ {
+ fprintf( stderr, "%d", *ptr++ );
+ if (--len) fputc( ',', stderr );
+ }
+ fputc( '}', stderr );
+}
+
+static void dump_bytes( const unsigned char *ptr, int len )
+{
+ fputc( '{', stderr );
+ while (len)
+ {
+ fprintf( stderr, "%02x", *ptr++ );
+ if (--len) fputc( ',', stderr );
+ }
+ fputc( '}', stderr );
+}
+
/* dumping for functions for requests that have a variable part */
static void dump_varargs_select( struct select_request *req )
{
- int i;
- for (i = 0; i < req->count; i++)
- fprintf( stderr, "%c%d", i ? ',' : '{', req->handles[i] );
- fprintf( stderr, "}" );
+ dump_ints( req->handles, req->count );
}
static void dump_varargs_get_apcs( struct get_apcs_request *req )
@@ -31,10 +52,13 @@
static void dump_varargs_get_socket_event( struct get_socket_event_request *req )
{
- int i;
- for (i = 0; i < FD_MAX_EVENTS; i++)
- fprintf( stderr, "%c%d", i ? ',' : '{', req->errors[i] );
- fprintf( stderr, "}" );
+ dump_ints( req->errors, FD_MAX_EVENTS );
+}
+
+static void dump_varargs_read_process_memory( struct read_process_memory_request *req )
+{
+ int count = MIN( req->len, get_req_size( req->data, sizeof(int) ) );
+ dump_bytes( (unsigned char *)req->data, count * sizeof(int) );
}
@@ -763,6 +787,19 @@
fprintf( stderr, " pid=%p", req->pid );
}
+static void dump_read_process_memory_request( struct read_process_memory_request *req )
+{
+ fprintf( stderr, " handle=%d,", req->handle );
+ fprintf( stderr, " addr=%p,", req->addr );
+ fprintf( stderr, " len=%d", req->len );
+}
+
+static void dump_read_process_memory_reply( struct read_process_memory_request *req )
+{
+ fprintf( stderr, " data=" );
+ dump_varargs_read_process_memory( req );
+}
+
static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
(dump_func)dump_new_process_request,
(dump_func)dump_new_thread_request,
@@ -835,6 +872,7 @@
(dump_func)dump_send_debug_event_request,
(dump_func)dump_continue_debug_event_request,
(dump_func)dump_debug_process_request,
+ (dump_func)dump_read_process_memory_request,
};
static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
@@ -909,6 +947,7 @@
(dump_func)dump_send_debug_event_reply,
(dump_func)0,
(dump_func)0,
+ (dump_func)dump_read_process_memory_reply,
};
static const char * const req_names[REQ_NB_REQUESTS] = {
@@ -983,6 +1022,7 @@
"send_debug_event",
"continue_debug_event",
"debug_process",
+ "read_process_memory",
};
/* ### make_requests end ### */