Skip to content

Commit 13d180c

Browse files
committed
updated strace-grate-c
1 parent 20fe084 commit 13d180c

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

examples/strace-grate/strace.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ DEFINE_HANDLER(setsockopt, 54, ARG_INT, ARG_INT, ARG_INT, ARG_PTR, ARG_INT)
6363
DEFINE_HANDLER(getsockopt, 55, ARG_INT, ARG_INT, ARG_INT, ARG_PTR, ARG_PTR)
6464
//DEFINE_HANDLER(clone, 56, ARG_INT, ARG_PTR, ARG_PTR, ARG_PTR, ARG_PTR)
6565
DEFINE_HANDLER(fork, 57)
66-
//DEFINE_HANDLER(exec, 59, ARG_STR, ARG_PTR, ARG_PTR)
67-
DEFINE_HANDLER(exit, 60, ARG_INT)
66+
DEFINE_HANDLER(exec, 59, ARG_STR, ARG_PTR, ARG_PTR)
67+
//DEFINE_HANDLER(exit, 60, ARG_INT)
6868
DEFINE_HANDLER(waitpid, 61, ARG_INT, ARG_PTR, ARG_INT)
6969
DEFINE_HANDLER(kill, 62, ARG_INT, ARG_INT)
7070
DEFINE_HANDLER(shmdt, 67, ARG_PTR)

examples/strace-grate/strace.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
2525
// macro for defining syscall handlers dynamically
2626
#define DEFINE_HANDLER(name, num, ...) \
2727
/* function defination for syscall handler */ \
28-
int name##_grate(uint64_t cageid, uint64_t arg1, uint64_t arg1cage, \
28+
int name##_grate(uint64_t cageid, uint64_t arg1, uint64_t arg1cage, \
2929
uint64_t arg2, uint64_t arg2cage, \
3030
uint64_t arg3, uint64_t arg3cage, \
3131
uint64_t arg4, uint64_t arg4cage, \
@@ -35,15 +35,15 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
3535
int thiscage = getpid(); \
3636
int types[] = {__VA_ARGS__}; \
3737
int argsnum = sizeof(types) / sizeof(int); \
38-
uint64_t args[] = {arg1, arg2, arg3, arg4, arg5, arg6}; \
38+
uint64_t args[] = {arg1, arg2, arg3, arg4, arg5, arg6}; \
3939
uint64_t argcages[] = {arg1cage, arg2cage, arg3cage, arg4cage, \
4040
arg5cage, arg6cage}; \
4141
\
42-
char log_buffer[1024]; \
42+
char log_buffer[2048]; \
4343
int offset = 0; \
4444
\
4545
/* log buffer to print syscall with args and ret val */ \
46-
offset += snprintf(log_buffer + offset, 1024 - offset, "%s(", #name); \
46+
offset += snprintf(log_buffer + offset, 1024 - offset, "%s(", #name); \
4747
\
4848
for (int i = 0; i < argsnum; i++) { \
4949
if (i > 0) \
@@ -72,29 +72,28 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
7272
} \
7373
} \
7474
offset += snprintf(log_buffer + offset, 1024 - offset, ")"); \
75-
\
76-
/* flush log buffer before exit */ \
77-
int exit_call = (num == 60); \
78-
if (exit_call) { \
75+
\
76+
int is_terminal = (num == 59 || num == 60 || num == 231); \
77+
if (is_terminal) { \
7978
fprintf(stderr, "%s\n", log_buffer); \
8079
fflush(stderr); \
8180
} \
8281
\
8382
/* forward interposed syscall */ \
8483
int ret = make_threei_call(num, 0, \
85-
thiscage, arg1cage, \
84+
thiscage, thiscage, \
8685
arg1, arg1cage, arg2, arg2cage, \
8786
arg3, arg3cage, arg4, arg4cage, \
8887
arg5, arg5cage, arg6, arg6cage, 0); \
8988
\
90-
if (!exit_call) { \
89+
if (!is_terminal) { \
9190
fprintf(stderr, "%s = %d\n", log_buffer, ret); \
92-
} else { \
93-
fprintf(stderr, "%s [failed] = %d\n", log_buffer, ret); \
91+
} else { \
92+
fprintf(stderr, "%s [failed] = %d\n", log_buffer, ret); \
9493
} \
9594
\
9695
/* printing log buffer after return to ensure proper printing */ \
97-
/*fprintf(stderr, "%s = %d\n", log_buffer, ret);*/ \
96+
fprintf(stderr, "%s = %d\n", log_buffer, ret); \
9897
return ret; \
9998
} \
10099
\

examples/strace-grate/strace_grate.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ int main(int argc, char *argv[]) {
1818
exit(EXIT_FAILURE);
1919
} else if (pid == 0) {
2020
int cageid = getpid();
21-
2221
// loop to register syscall handlers
2322
for (int i = 0; i < MAX_SYSCALLS; i++) {
2423
if (syscall_handler_table[i] != NULL) {
25-
uint64_t fn_ptr = (uint64_t)(uintptr_t)syscall_handler_table[i];
26-
register_handler(cageid, i, 1, grateid, fn_ptr);
27-
//fprintf(stderr, "[Grate] Registered handler for syscall %d at 0x%llx\n", i, fn_ptr);
24+
uint64_t fn_ptr = (uint64_t)(uintptr_t)syscall_handler_table[i];
25+
register_handler(cageid, i, grateid, fn_ptr);
2826
}
2927
}
3028
if (execv(argv[1], &argv[1]) == -1) {

0 commit comments

Comments
 (0)