[PATCH 3/4] getrandom: print getrandom buffer as hex array

JingPiao Chen chenjingpiao at gmail.com
Fri Jan 6 07:16:29 UTC 2017


In general, the random bytes is not number or letter, print
as hex array is clear, use 0x%02x format print it, easy to
konw each element is one byte, so 0 will print 0x00.

* getrandom.c:
* tests/getrandom.c: Update print buffer.
* tests/getrandom.test: Update.
---
 getrandom.c          | 16 ++++++++++++----
 tests/getrandom.c    |  6 +++---
 tests/getrandom.test |  2 +-
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/getrandom.c b/getrandom.c
index 0a353ad..695133a 100644
--- a/getrandom.c
+++ b/getrandom.c
@@ -1,13 +1,21 @@
 #include "defs.h"
 #include "xlat/getrandom_flags.h"
 
+static bool
+print_buf(struct tcb *tcp, void *elem_buf, size_t elem_size, void *opaque_data)
+{
+	tprintf("0x%02x", *(unsigned char *) elem_buf);
+
+	return true;
+}
+
 SYS_FUNC(getrandom)
 {
 	if (exiting(tcp)) {
-		if (syserror(tcp))
-			printaddr(tcp->u_arg[0]);
-		else
-			printstrn(tcp, tcp->u_arg[0], tcp->u_rval);
+		char buf;
+
+		print_array(tcp, tcp->u_arg[0], tcp->u_arg[1], &buf, sizeof(buf),
+				umoven_or_printaddr, print_buf, 0);
 		tprintf(", %" PRI_klu ", ", tcp->u_arg[1]);
 		printflags(getrandom_flags, tcp->u_arg[2], "GRND_???");
 	}
diff --git a/tests/getrandom.c b/tests/getrandom.c
index de1a087..bfdadf4 100644
--- a/tests/getrandom.c
+++ b/tests/getrandom.c
@@ -40,13 +40,13 @@ main(void)
 
 	if (syscall(__NR_getrandom, buf, sizeof(buf) - 1, 0) != sizeof(buf) - 1)
 		perror_msg_and_skip("getrandom");
-	printf("getrandom(\"\\x%02x\\x%02x\\x%02x\", 3, 0) = 3\n",
+	printf("getrandom([0x%02x, 0x%02x, 0x%02x], 3, 0) = 3\n",
 	       (int) buf[0], (int) buf[1], (int) buf[2]);
 
 	if (syscall(__NR_getrandom, buf, sizeof(buf), 1) != sizeof(buf))
 		perror_msg_and_skip("getrandom");
-	printf("getrandom(\"\\x%02x\\x%02x\\x%02x\"..., 4, GRND_NONBLOCK) = 4\n",
-	       (int) buf[0], (int) buf[1], (int) buf[2]);
+	printf("getrandom([0x%02x, 0x%02x, 0x%02x, 0x%02x], 4, GRND_NONBLOCK) = 4\n",
+	       (int) buf[0], (int) buf[1], (int) buf[2], (int) buf[3]);
 
 	if (syscall(__NR_getrandom, buf, sizeof(buf), 0x3003) != -1)
 		perror_msg_and_skip("getrandom");
diff --git a/tests/getrandom.test b/tests/getrandom.test
index e06367c..f22d2d8 100755
--- a/tests/getrandom.test
+++ b/tests/getrandom.test
@@ -3,4 +3,4 @@
 # Check getrandom syscall decoding.
 
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a32 -xx -s3
+run_strace_match_diff -a35
-- 
2.7.4





More information about the Strace-devel mailing list