• Stars
    star
    250
  • Rank 162,397 (Top 4 %)
  • Language
    Go
  • License
    The Unlicense
  • Created about 2 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

πŸͺ› It's strace, with colours.

grace

grace is a tool for monitoring and annotating syscalls for a given process.

It's essentially a lightweight strace, in Go, with colours and pretty output.

It's possible to tweak and filter the output to make it quite readable, for example (using -vnmx):

You can also review a summary of encountered syscalls (and sort by various columns):

grace vs. strace

grace isn't meant to compete with strace, it's purely meant to be a user-friendly, lightweight alternative. However, the following should provide a rough idea of what is supported in grace so far.

Over time grace is meant to become a simpler, more readable alternative to strace (strace for dummies?), albeit with reduced functionality/advanced features.

Feature grace strace
Start a program and print all syscalls it makes βœ… βœ…
Attach to an existing process by pid and print all syscalls it makes βœ… βœ…
Filter syscalls by name, e.g. only show occurrences of the open syscall βœ… βœ…
Filter syscalls using a given path, e.g. only show syscalls that access /etc/passwd βœ… βœ…
Dump I/O for certain file descriptors βœ… βœ…
Count occurrences and duration of all syscalls and present in a useful format βœ… βœ…
Print relative/absolute timestamps βœ… βœ…
Tamper with syscalls ❌ βœ…
Print extra information about file descriptors, such as path, socket addresses etc. βœ… βœ…
Print stack traces ❌ βœ…
Filter by return value βœ… βœ…
Pretty colours to make output easier to read βœ… ❌
Lots of output options and customisation vectors βœ… βœ…
Output to file βœ… βœ…
Filter by failing/non-failing syscalls βœ… βœ…

NOTE: Please feel free to add important strace features to this table, I'm working with a limited knowledge of strace.

Installation

Grab a statically compiled binary from the latest release.

Supported Platforms/Architecture

Currently only Linux/amd64 is supported. Other architectures coming soon.

If you'd like to implement a new architecture, you can duplicate tracer/sys_amd64.go and convert it to contain the syscall definitions for your arch.

Usage Examples

Trace a program

grace -- cat /dev/null  # replace 'cat /dev/null' with your program

Trace an existing process

grace -p 123 # replace 123 with your pid

# e.g. you could use pgrep to find the pid of a process
grace -p `pgrep ping`

Trace a program and filter by syscall name

grace -f "name=openat" -- cat /dev/null 

# you can also look for multiple syscalls
grace -f "name=openat&name=close" -- cat /dev/null

Trace a program and filter by syscall name and path

grace -f "name=openat&path=/dev/null" -- cat /dev/null

Trace a program and wire up stdin/out/err with the terminal

grace -F -- cat

Trace a program with maximum readability options

grace -vnmx -- cat /dev/null

Trace only failing syscalls

grace -Z -- cat /dev/null 

Show a summary of syscalls with durations, counts and errors

grace -S -- cat /dev/null

Build Dependencies

If you want to build grace yourself instead of using the precompiled binaries, you'll need a recent version of Go (1.19+). Then make build is your friend.

More Repositories

1

traitor

⬆️ ☠️ πŸ”₯ Automatic Linux privesc via exploitation of low-hanging fruit e.g. gtfobins, pwnkit, dirty pipe, +w docker.sock
Go
6,575
star
2

darktile

🌘 Darktile is a GPU rendered terminal emulator designed for tiling window managers.
Go
2,743
star
3

gitjacker

πŸ”ͺ :octocat: Leak git repositories from misconfigured websites
Go
1,532
star
4

tml

πŸŒˆπŸ’»πŸŽ¨ A tiny markup language for terminal output. Makes formatting output in CLI apps easier!
Go
729
star
5

shox

🍫 A customisable, universally compatible terminal status bar
Go
700
star
6

dismember

πŸ”ͺ Scan memory for secrets and more. Maybe eventually a full /proc toolkit.
Go
593
star
7

furious

😠 Go IP/port scanner with SYN (stealth) scanning and device manufacturer identification
Go
569
star
8

scout

πŸ”­ Lightweight URL fuzzer and spider: Discover a web server's undisclosed files, directories and VHOSTs
Go
516
star
9

memit

πŸš«πŸ’Ύ Run binaries straight from memory in Linux
Go
305
star
10

bearings

🧭 A fast, clean, customisable shell prompt for zsh, bash, fish, and more...
Go
195
star
11

siphon

βš—οΈ Intercept stdin/stdout/stderr for any process
Go
187
star
12

pax

πŸ’€ πŸ”“ CLI tool for PKCS7 padding oracle attacks
Go
135
star
13

comet

β˜„οΈ Command line tool to help you use conventional commit messages (https://www.conventionalcommits.org)
Go
109
star
14

memoryfs

🧠 πŸ—„οΈ In-memory filesystem implementation of io/fs.FS
Go
87
star
15

extrude

πŸ•΅οΈ Analyse binaries for missing security features, information disclosure and more...
Go
69
star
16

gifwrap

πŸ™ GIFs in your terminal
Go
54
star
17

flinch

A collection of terminal-based widgets for richer Golang CLI apps.
Go
44
star
18

loading

A collection of highly customisable loading bars for Go CLI apps.
Go
34
star
19

guerrilla

πŸ“¨πŸ‘€ Guerilla Mail CLI + Go module
Go
28
star
20

sunder

βœ‚οΈ terminal multiplexer in golang // a minimalist tmux alternative
Go
27
star
21

magic

πŸŽ©πŸ‡ Toolkit for detecting and verifying file type using magic bytes in pure Golang
Go
24
star
22

peridot

Developer machine management for Linux/OSX. Think Terraform/Ansible for your dotfiles/packages! βš™οΈπŸ 
Go
20
star
23

clinch

Go CLI toolkit πŸ”¨
Go
19
star
24

github-profile-terminal-action

Create a GitHub profile README nested inside a terminal nested inside a GIF
Go
17
star
25

gobless

Build beautiful terminal dashboards/GUIs in golang.
Go
16
star
26

lyric

🎡 Song lyrics in your terminal via Genius
Go
16
star
27

js-nes-emulator

NES emulator in javascript.
JavaScript
13
star
28

lambo

Test your API gateway routed lambdas locally and in CI
Go
8
star
29

sshotp

Enter passwords to commands non-interactively
Go
8
star
30

hackerone

Go HackerOne API Client
Go
8
star
31

raytracing

3D Raytracing in Go
Go
8
star
32

thisisfine

This is fine.
Makefile
7
star
33

darktile-themes

A repository of themes for https://github.com/liamg/darktile
Shell
7
star
34

liamg

GitHub profile (auto-updated every 4 hours)
6
star
35

gomoon

🌚 πŸŒ’ πŸŒ“ πŸŒ” 🌝 πŸŒ– πŸŒ— 🌘 🌚
Go
6
star
36

jfather

JSON parsing with extra metadata
Go
6
star
37

happen

Go
5
star
38

termutil

Terminal utilities
Go
4
star
39

philter

Personal home DNS with ad blocking
Go
4
star
40

iris-layout

A UK coding layout for the Iris rev4 keyboard
C
4
star
41

bfc

A compiler for brainfuck by someone who has no idea how compilers work
Go
4
star
42

waitforhttp

Tiny package to wait for an HTTP server to be up
Go
4
star
43

iamgo

Parse/assemble AWS IAM policy documents and their various quirks
Go
4
star
44

fontinfo

Go package to list/match available fonts on a Linux system
Go
4
star
45

rope

〰️ A rope data-structure implementation designed for UTF-8 text manipulation.
Go
3
star
46

dotfiles

Shell
2
star
47

lcd

Go module for driving (non-I2C) LCD devices
Go
2
star
48

nvim-config

Lua
2
star
49

go-project-template-cli

A template for my Go CLI projects
Makefile
2
star
50

ecs

Entity Component System architecture implementation in Go
Go
2
star
51

golume

Go
1
star
52

dnsaur

DNS client/server components in node.
JavaScript
1
star
53

postMessageSniffer

Simple chrome extension to console.log all received postMessage payloads.
JavaScript
1
star
54

reversing

Reverse engineering challenge hackery
C
1
star
55

adtechblogs

The Best Ad Tech Blogs
1
star
56

torrentialjs

BitTorrent library in Node
JavaScript
1
star
57

gca

πŸ”¬πŸŽ² Go Cellular Automata
Go
1
star
58

.github

My default .github miscellany
1
star
59

sidestep

↔️ Tunnel TCP/UDP over DNS: Evade firewalls for fun and profit
1
star
60

dijits

JavaScript library to convert between numbers and words: 407 -> Four hundred and seven
JavaScript
1
star
61

tls

πŸ”’ Custom TLS implementation for no good reason
Go
1
star
62

gomega

A Sega Mega Drive (Genesis) Emulator in Go.
1
star
63

writeups

1
star
64

xu

Modern Hex Editor
Go
1
star