Skip to content

Commit

Permalink
strace: Add support for pretty-printing the prctl syscall
Browse files Browse the repository at this point in the history
  • Loading branch information
IdanHo authored and awesomekling committed Mar 2, 2024
1 parent 8c562a7 commit 0b7e4b3
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions Userland/Utilities/strace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <AK/StdLibExtras.h>
#include <AK/Types.h>
#include <Kernel/API/SyscallString.h>
#include <Kernel/API/prctl_numbers.h>
#include <LibCore/ArgsParser.h>
#include <LibCore/File.h>
#include <LibCore/System.h>
Expand Down Expand Up @@ -210,6 +211,18 @@ HANDLE(CLOCK_REALTIME_COARSE)
HANDLE(CLOCK_MONOTONIC_COARSE)
END_VALUES_TO_NAMES()

VALUES_TO_NAMES(prctl_option_name)
HANDLE(PR_SET_DUMPABLE)
HANDLE(PR_GET_DUMPABLE)
HANDLE(PR_SET_NO_NEW_SYSCALL_REGION_ANNOTATIONS)
HANDLE(PR_GET_NO_NEW_SYSCALL_REGION_ANNOTATIONS)
HANDLE(PR_SET_COREDUMP_METADATA_VALUE)
HANDLE(PR_SET_PROCESS_NAME)
HANDLE(PR_GET_PROCESS_NAME)
HANDLE(PR_SET_THREAD_NAME)
HANDLE(PR_GET_THREAD_NAME)
END_VALUES_TO_NAMES()

static int g_pid = -1;

using syscall_arg_t = u64;
Expand Down Expand Up @@ -711,6 +724,23 @@ static void format_kill(FormattedSyscallBuilder& builder, pid_t pid_or_pgid, int
builder.add_argument(signal);
}

static void format_prctl(FormattedSyscallBuilder& builder, int option, size_t arg1, size_t arg2, size_t arg3)
{
builder.add_argument(prctl_option_name(option));
switch (option) {
case PR_SET_DUMPABLE:
case PR_SET_NO_NEW_SYSCALL_REGION_ANNOTATIONS:
builder.add_argument((bool)arg1);
break;
case PR_GET_DUMPABLE:
case PR_GET_NO_NEW_SYSCALL_REGION_ANNOTATIONS:
break;
default:
builder.add_arguments(arg1, arg2, arg3);
break;
}
}

static ErrorOr<void> format_syscall(FormattedSyscallBuilder& builder, Syscall::Function syscall_function, syscall_arg_t arg1, syscall_arg_t arg2, syscall_arg_t arg3, syscall_arg_t arg4, syscall_arg_t res)
{
enum ResultType {
Expand Down Expand Up @@ -801,6 +831,9 @@ static ErrorOr<void> format_syscall(FormattedSyscallBuilder& builder, Syscall::F
case SC_kill:
format_kill(builder, (pid_t)arg1, (int)arg2);
break;
case SC_prctl:
format_prctl(builder, (int)arg1, (size_t)arg2, (size_t)arg3, (size_t)arg4);
break;
case SC_getuid:
case SC_geteuid:
case SC_getgid:
Expand Down

0 comments on commit 0b7e4b3

Please sign in to comment.