Repository: pwndbg/pwndbg (branch: got)
Commit date: 2023-12-29T02:38:21Z

Workflow file: .github/workflows/tests.yml (Unit tests)
name: Unit tests
on:
  push:
    branches:
      - dev
  pull_request:

jobs:
  tests:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
    runs-on: ${{ matrix.os }}
    services:
      pypi_wayback:
        image: ghcr.io/waleko/pypi-wayback
        ports:
          - 8629:8080
    timeout-minutes: 20
    steps:
    - uses: actions/checkout@v3
    - name: Cache for pip
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ matrix.os }}-cache-pip

    - name: Install dependencies
      run: |
        ./setup.sh
        ./setup-dev.sh

    - name: Python version info
      run: |
        echo 'GDB py:'
        gdb --batch --quiet --nx --nh --ex 'py import sys; print(sys.version)'
        echo 'Installed py:'
        ./.venv/bin/python -V
        echo 'Installed packages:'
        ./.venv/bin/python -m pip freeze

    # We set `kernel.yama.ptrace_scope=0` for `attachp` command tests
    - name: Run tests
      run: |
        mkdir .cov
        sudo sysctl -w kernel.yama.ptrace_scope=0
        ./tests.sh --cov

    - name: Process coverage data
      if: matrix.os == 'ubuntu-22.04'
      run: |
        ./.venv/bin/coverage combine
        ./.venv/bin/coverage xml

    - name: "Upload coverage to Codecov"
      if: matrix.os == 'ubuntu-22.04'
      uses: codecov/codecov-action@v3

  qemu-tests:
    runs-on: [ubuntu-22.04]
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v3

    - name: Cache for pip
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ matrix.os }}-cache-pip

    - name: Install dependencies
      run: |
        ./setup.sh
        ./setup-dev.sh
        mkdir .cov

    - name: Set up cache for QEMU images
      id: qemu-cache
      uses: actions/cache@v3
      with:
        path: ./tests/qemu-tests/images
        key: ${{ matrix.os }}-cache-qemu-images

    - name: Download images
      run: |
        ./tests/qemu-tests/download_images.sh

    # We set `kernel.yama.ptrace_scope=0` for `gdb-pt-dump`
    - name: Run tests
      working-directory: ./tests/qemu-tests
      run: |
        sudo sysctl -w kernel.yama.ptrace_scope=0
        ./tests.sh --cov

    - name: Run qemu-user tests
      working-directory: ./tests/qemu-tests
      run: |
        ./test_qemu.sh

    - name: Process coverage data
      run: |
        ./.venv/bin/coverage combine
        ./.venv/bin/coverage xml

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3

env:
  PIP_INDEX_URL: http://localhost:8629/2023-12-29
  UV_INDEX_URL: http://localhost:8629/2023-12-29


Failed build logs:
step_name: tests (ubuntu-22.04)/6_Run tests.txt
log: ##[group]Run mkdir .cov
[36;1mmkdir .cov[0m
[36;1msudo sysctl -w kernel.yama.ptrace_scope=0[0m
[36;1m./tests.sh --cov[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
kernel.yama.ptrace_scope = 0
[+] Building 'div_zero.out'
[+] Building 'heap_bins.out'
[+] Building heap_bugs.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-Wno-int-to-pointer-cast -Wno-int-conversion -Wno-unused-variable \
-target native-native-gnu.2.33 \
-Wl,-rpath=/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/binaries/glibcs/2.33:\
-Wl,--dynamic-linker=/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/binaries/glibcs/2.33/ld-linux-x86-64.so.2 \
-o heap_bugs.out heap_bugs.c
[+] Building 'heap_find_fake_fast.out'
[+] Building heap_malloc_chunk.out
gcc -g -O0 -Wno-nonnull -Wno-unused-result -o heap_malloc_chunk.out heap_malloc_chunk.c -pthread -lpthread
[+] Building heap_vis.out
gcc -g -O0 -Wno-nonnull -o heap_vis.out heap_vis.c -pthread -lpthread
[+] Building 'initialized_heap.out'
[+] Building issue_1565.out
gcc -g -O0 -o issue_1565.out issue_1565.c -pthread -lpthread
[+] Building 'linked-lists.out'
[+] Building multiple_threads.out
gcc -g -O0 -o multiple_threads.out multiple_threads.c -pthread -lpthread
[+] Building 'reference-binary-net.out'
[+] Building 'reference-binary.out'
[+] Building 'search_memory.out'
[+] Building 'tabstop.out'
[+] Building 'telescope_binary.out'
[+] Building tls.i386.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target i386-linux-gnu \
-o tls.i386.out tls.i386.c
[+] Building tls.x86-64.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target x86_64-linux-gnu \
-o tls.x86-64.out tls.x86-64.c
[+] Building 'use-fds.out'
[+] Building 'very_long_symbols.out'
[+] Building 'conditional_branch_breakpoints_x64.o'
[+] Linking 'conditional_branch_breakpoints_x64.out'
[+] Building 'emulate_disasm.o'
[+] Linking 'emulate_disasm.out'
[+] Building 'emulate_disasm_loop.o'
[+] Linking 'emulate_disasm_loop.out'
[+] Building 'memory.o'
[+] Linking 'memory.out'
[+] Building 'stepuntilasm_x64.o'
[+] Linking 'stepuntilasm_x64.out'
[+] Building 'syscalls-x64.o'
[+] Linking 'syscalls-x64.out'
[+] Building 'gosample.x64'
[+] Building 'gosample.x86'
[+] Building reference_bin_pie.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fpie -o reference_bin_pie.out reference-binary.c
[+] Building reference_bin_nopie.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fno-pie -o reference_bin_nopie.out reference-binary.c
g++ -O0 -ggdb -Wno-pmf-conversions symbol_1600_and_752.cpp -o symbol_1600_and_752.out
[+] Building initialized_heap_x64.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target x86_64-linux-gnu \
-o initialized_heap_x64.out initialized_heap.c
[+] Building initialized_heap_i386_big.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target i386-linux-gnu \
-o initialized_heap_i386_big.out initialized_heap.c
[+] Building linked-lists.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fpie -g -o linked_lists.out linked-lists.c
rm emulate_disasm_loop.o syscalls-x64.o conditional_branch_breakpoints_x64.o stepuntilasm_x64.o emulate_disasm.o memory.o
Will run codecov
ZIGPATH set to /home/runner/work/pwndbg/pwndbg/.zig

Running tests in parallel
Running with coverage
Running with coverage
Running with coverage
Running with coverage
test_attachp_command_attaches_to_procname_resolve_none_no_truncate     [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_none                 [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname                              [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_pid                                   [32mPASSED[0m
Running with coverage
test_attachp_command_nonexistent_procname                              [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_oldest               [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_ask                  [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_newest               [32mPASSED[0m
Running with coverage
test_cache_single_value                                                [32mPASSED[0m
Running with coverage
test_cache_args_kwargs_properly                                        [32mPASSED[0m
Running with coverage
test_command_break_if_x64[x86-64]                                      [32mPASSED[0m
Running with coverage
test_attachp_command_no_pids                                           [32mPASSED[0m
Running with coverage
test_config_filtering                                                  [32mPASSED[0m
Running with coverage
test_config_filtering_missing                                          [32mPASSED[0m
Running with coverage
test_config                                                            [32mPASSED[0m
Running with coverage
test_command_cyclic_value                                              [32mPASSED[0m
Running with coverage
test_command_cyclic_register                                           [32mPASSED[0m
Running with coverage
test_command_cyclic_wrong_alphabet                                     [32mPASSED[0m
Running with coverage
test_command_cyclic_address                                            [32mPASSED[0m
Running with coverage
test_command_cyclic_wrong_length                                       [32mPASSED[0m
Running with coverage
test_command_distance                                                  [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_set                                  [32mPASSED[0m
Running with coverage
test_command_errno                                                     [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_set_remove                           [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_found                                [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_found_two                          [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_found_one                          [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_negative                           [32mPASSED[0m
Running with coverage
test_command_killthreads_kills_all_threads_except_current              [32mPASSED[0m
Running with coverage
test_command_killthreads_kills_specific_thread                         [32mPASSED[0m
Running with coverage
test_command_killthreads_produces_error_when_unknown_thread_passed     [32mPASSED[0m
Running with coverage
test_command_killthreads_before_binary_start                           [32mPASSED[0m
Running with coverage
test_command_plist_flat_no_flags                                       [32mPASSED[0m
Running with coverage
test_command_plist_flat_field                                          [32mPASSED[0m
Running with coverage
test_command_plist_flat_sentinel                                       [32mPASSED[0m
Running with coverage
test_command_plist_nested_direct                                       [32mPASSED[0m
Running with coverage
test_command_plist_nested_indirect                                     [32mPASSED[0m
Running with coverage
test_command_procinfo_before_binary_start                              [32mPASSED[0m
Running with coverage
test_command_procinfo                                                  [32mPASSED[0m
Running with coverage
test_command_search_limit                                              [32mPASSED[0m
Running with coverage
test_command_search_step                                               [32mPASSED[0m
Running with coverage
test_command_search_alignment                                          [32mPASSED[0m
Running with coverage
test_command_search_byte_width                                         [32mPASSED[0m
Running with coverage
test_command_search_word_width                                         [32mPASSED[0m
Running with coverage
test_command_search_dword_width                                        [32mPASSED[0m
Running with coverage
test_command_search_rwx                                                [32mPASSED[0m
Running with coverage
test_command_untilasm_x64                                              [32mPASSED[0m
Running with coverage
test_command_search_qword_width                                        [32mPASSED[0m
Running with coverage
test_command_telescope                                                 [32mPASSED[0m
Running with coverage
test_command_telescope_reverse                                         [32mPASSED[0m
Running with coverage
test_command_telescope_n_records                                       [32mPASSED[0m
Running with coverage
test_telescope_command_with_address_as_count                           [32mPASSED[0m
Running with coverage
test_telescope_command_with_address_as_count_and_reversed_flag         [32mPASSED[0m
Running with coverage
test_command_telescope_reverse_skipped_records_shows_input_address     [32mPASSED[0m
Running with coverage
test_command_telescope_frame                                           [32mPASSED[0m
Running with coverage
test_command_telescope_frame_bp_below_sp                               [32mPASSED[0m
Running with coverage
test_command_telescope_frame_bp_sp_different_vmmaps                    [32mPASSED[0m
Running with coverage
test_tls_address_and_command[x86-64]                                   [32mPASSED[0m
Running with coverage
test_tls_address_and_command[i386]                                     [32mPASSED[0m
Running with coverage
test_command_vmmap_on_coredump_on_crash_simple_binary[False]           [32mPASSED[0m
Running with coverage
test_command_vmmap_on_coredump_on_crash_simple_binary[True]            [32mPASSED[0m
Running with coverage
test_command_xor_with_gdb_execute                                      [32mPASSED[0m
Running with coverage
test_vmmap_issue_1565                                                  [32mPASSED[0m
Running with coverage
test_command_xor_with_int                                              [32mPASSED[0m
Running with coverage
test_command_xor_with_hex                                              [32mPASSED[0m
Running with coverage
test_command_memfrob                                                   [32mPASSED[0m
Running with coverage
test_commands[cwatch]                                                  [33mXPASS[0m
Running with coverage
test_commands[pwndbg]                                                  [33mXPASS[0m
Running with coverage
test_commands[eb]                                                      [33mXPASS[0m
Running with coverage
test_commands[slab]                                                    [33mXPASS[0m
Running with coverage
test_commands[piebase]                                                 [33mXPASS[0m
Running with coverage
test_commands[bins]                                                    [33mXPASS[0m
Running with coverage
test_commands[environ]                                                 [33mXPASS[0m
Running with coverage
test_commands[envp]                                                    [33mXPASS[0m
Running with coverage
test_commands[xinfo]                                                   [33mXPASS[0m
Running with coverage
test_commands[sstart]                                                  [33mXPASS[0m
Running with coverage
test_commands[r2]                                                      [33mXPASS[0m
Running with coverage
test_commands[argc]                                                    [33mXPASS[0m
Running with coverage
test_commands[xor]                                                     [33mXPASS[0m
Running with coverage
test_commands[pc]                                                      [33mXPASS[0m
Running with coverage
test_commands[config]                                                  [33mXPASS[0m
Running with coverage
test_commands[breakrva]                                                [33mXPASS[0m
Running with coverage
test_commands[stepret]                                                 [33mXPASS[0m
Running with coverage
test_commands[gsbase]                                                  [33mXPASS[0m
Running with coverage
test_commands[ignore]                                                  [33mXPASS[0m
Running with coverage
test_commands[ai]                                                      [33mXPASS[0m
Running with coverage
test_commands[plist]                                                   [33mXPASS[0m
Running with coverage
test_commands[pdisass]                                                 [33mXPASS[0m
Running with coverage
test_commands[contextunwatch]                                          [33mXPASS[0m
Running with coverage
test_commands[nearpc]                                                  [33mXPASS[0m
Running with coverage
test_commands[unsortedbin]                                             [33mXPASS[0m
Running with coverage
test_commands[xuntil]                                                  [33mXPASS[0m
Running with coverage
test_commands[find_fake_fast]                                          [33mXPASS[0m
Running with coverage
test_commands[db]                                                      [33mXPASS[0m
Running with coverage
test_commands[cymbol]                                                  [33mXPASS[0m
Running with coverage
test_commands[vmmap_clear]                                             [33mXPASS[0m
Running with coverage
test_commands[j]                                                       [33mXPASS[0m
Running with coverage
test_commands[radare2]                                                 [33mXPASS[0m
Running with coverage
test_commands[so]                                                      [33mXPASS[0m
Running with coverage
test_commands[bl]                                                      [33mXPASS[0m
Running with coverage
test_commands[vprot]                                                   [33mXPASS[0m
Running with coverage
test_commands[mp]                                                      [33mXPASS[0m
Running with coverage
test_commands[tcachebins]                                              [33mXPASS[0m
Running with coverage
test_commands[setflag]                                                 [33mXPASS[0m
Running with coverage
test_commands[ctx-watch]                                               [33mXPASS[0m
Running with coverage
test_commands[vis_heap_chunks]                                         [33mXPASS[0m
Running with coverage
test_commands[heap_config]                                             [33mXPASS[0m
Running with coverage
test_commands[spray]                                                   [33mXPASS[0m
Running with coverage
test_commands[ew]                                                      [33mXPASS[0m
Running with coverage
test_commands[memfrob]                                                 [33mXPASS[0m
Running with coverage
test_commands[kd]                                                      [33mXPASS[0m
Running with coverage
test_commands[linkmap]                                                 [33mXPASS[0m
Running with coverage
test_commands[bp]                                                      [33mXPASS[0m
Running with coverage
test_commands[bd]                                                      [33mXPASS[0m
Running with coverage
test_commands[stack]                                                   [33mXPASS[0m
Running with coverage
test_commands[configfile]                                              [33mXPASS[0m
Running with coverage
test_commands[gotplt]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextsc]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextjump]                                                [33mXPASS[0m
Running with coverage
test_commands[rzpipe]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextjmp]                                                 [33mXPASS[0m
Running with coverage
test_commands[env]                                                     [33mXPASS[0m
Running with coverage
test_commands[kconfig]                                                 [33mXPASS[0m
Running with coverage
test_commands[tls]                                                     [33mXPASS[0m
Running with coverage
test_commands[procinfo]                                                [33mXPASS[0m
Running with coverage
test_commands[largebins]                                               [33mXPASS[0m
Running with coverage
test_commands[stackf]                                                  [33mXPASS[0m
Running with coverage
test_commands[got-call-status]                                         [33mXPASS[0m
Running with coverage
test_commands[sigreturn]                                               [33mXPASS[0m
Running with coverage
test_commands[heap]                                                    [33mXPASS[0m
Running with coverage
test_commands[themefile]                                               [33mXPASS[0m
Running with coverage
test_commands[memoize]                                                 [33mXPASS[0m
Running with coverage
test_commands[kchecksec]                                               [33mXPASS[0m
Running with coverage
test_commands[mmap]                                                    [33mXPASS[0m
Running with coverage
test_commands[smallbins]                                               [33mXPASS[0m
Running with coverage
test_commands[ghidra]                                                  [33mXPASS[0m
Running with coverage
test_commands[save_ida]                                                [33mXPASS[0m
Running with coverage
test_commands[reload]                                                  [33mXPASS[0m
Running with coverage
test_commands[asm]                                                     [33mXPASS[0m
Running with coverage
test_commands[reinit_pwndbg]                                           [33mXPASS[0m
Running with coverage
test_commands[rz]                                                      [33mXPASS[0m
Running with coverage
test_commands[dqs]                                                     [33mXPASS[0m
Running with coverage
test_commands[vmmap_add]                                               [33mXPASS[0m
Running with coverage
test_commands[dq]                                                      [33mXPASS[0m
Running with coverage
test_commands[cunwatch]                                                [33mXPASS[0m
Running with coverage
test_commands[down]                                                    [33mXPASS[0m
Running with coverage
test_commands[regs]                                                    [33mXPASS[0m
Running with coverage
test_commands[disable-got-tracking]                                    [33mXPASS[0m
Running with coverage
test_commands[start]                                                   [33mXPASS[0m
Running with coverage
test_commands[dt]                                                      [33mXPASS[0m
Running with coverage
test_commands[ropper]                                                  [33mXPASS[0m
Running with coverage
test_commands[distance]                                                [33mXPASS[0m
Running with coverage
test_commands[malloc_chunk]                                            [33mXPASS[0m
Running with coverage
test_commands[kbase]                                                   [33mXPASS[0m
Running with coverage
test_commands[argv]                                                    [33mXPASS[0m
Running with coverage
test_commands[attachp]                                                 [33mXPASS[0m
Running with coverage
test_commands[telescope]                                               [33mXPASS[0m
Running with coverage
test_commands[contextoutput]                                           [33mXPASS[0m
Running with coverage
test_commands[bc]                                                      [33mXPASS[0m
Running with coverage
test_commands[peb]                                                     [33mXPASS[0m
Running with coverage
test_commands[errno]                                                   [33mXPASS[0m
Running with coverage
test_commands[fsbase]                                                  [33mXPASS[0m
Running with coverage
test_commands[p2p]                                                     [33mXPASS[0m
Running with coverage
test_commands[patch_list]                                              [33mXPASS[0m
Running with coverage
test_commands[k]                                                       [33mXPASS[0m
Running with coverage
test_commands[emulate]                                                 [33mXPASS[0m
Running with coverage
test_commands[killthreads]                                             [33mXPASS[0m
Running with coverage
test_commands[ctx-unwatch]                                             [33mXPASS[0m
Running with coverage
test_commands[flag]                                                    [33mXPASS[0m
Running with coverage
test_commands[cyclic]                                                  [33mXPASS[0m
Running with coverage
test_commands[aslr]                                                    [33mXPASS[0m
Running with coverage
test_commands[rop]                                                     [33mXPASS[0m
Running with coverage
test_commands[tcache]                                                  [33mXPASS[0m
Running with coverage
test_commands[ed]                                                      [33mXPASS[0m
Running with coverage
test_commands[nextcall]                                                [33mXPASS[0m
Running with coverage
test_commands[lm]                                                      [33mXPASS[0m
Running with coverage
test_commands[ropgadget]                                               [33mXPASS[0m
Running with coverage
test_commands[stepover]                                                [33mXPASS[0m
Running with coverage
test_commands[tips]                                                    [33mXPASS[0m
Running with coverage
test_commands[threads]                                                 [33mXPASS[0m
Running with coverage
test_commands[kcmdline]                                                [33mXPASS[0m
Running with coverage
test_commands[search]                                                  [33mXPASS[0m
Running with coverage
test_commands[vmmap_load]                                              [33mXPASS[0m
Running with coverage
test_commands[main]                                                    [33mXPASS[0m
Running with coverage
test_commands[break-if-not-taken]                                      [33mXPASS[0m
Running with coverage
test_commands[context]                                                 [33mXPASS[0m
Running with coverage
test_commands[eq]                                                      [33mXPASS[0m
Running with coverage
test_commands[dw]                                                      [33mXPASS[0m
Running with coverage
test_commands[brva]                                                    [33mXPASS[0m
Running with coverage
test_commands[libs]                                                    [33mXPASS[0m
Running with coverage
test_commands[ctx]                                                     [33mXPASS[0m
Running with coverage
test_commands[enable-got-tracking]                                     [33mXPASS[0m
Running with coverage
test_commands[nextret]                                                 [33mXPASS[0m
Running with coverage
test_commands[getfile]                                                 [33mXPASS[0m
Running with coverage
test_commands[valist]                                                  [33mXPASS[0m
Running with coverage
test_commands[up]                                                      [33mXPASS[0m
Running with coverage
test_commands[ctx-out]                                                 [33mXPASS[0m
Running with coverage
test_commands[u]                                                       [33mXPASS[0m
Running with coverage
test_commands[comm]                                                    [33mXPASS[0m
Running with coverage
test_commands[dumpargs]                                                [33mXPASS[0m
Running with coverage
test_commands[dds]                                                     [33mXPASS[0m
Running with coverage
test_commands[address]                                                 [33mXPASS[0m
Running with coverage
test_commands[retaddr]                                                 [33mXPASS[0m
Running with coverage
test_commands[go]                                                      [33mXPASS[0m
Running with coverage
test_commands[dps]                                                     [33mXPASS[0m
Running with coverage
test_commands[mprotect]                                                [33mXPASS[0m
Running with coverage
test_commands[init]                                                    [33mXPASS[0m
Running with coverage
test_commands[entry]                                                   [33mXPASS[0m
Running with coverage
test_commands[auxv]                                                    [33mXPASS[0m
Running with coverage
test_commands[dc]                                                      [33mXPASS[0m
Running with coverage
test_commands[hexdump]                                                 [33mXPASS[0m
Running with coverage
test_commands[patch]                                                   [33mXPASS[0m
Running with coverage
test_commands[arena]                                                   [33mXPASS[0m
Running with coverage
test_commands[try_free]                                                [33mXFAIL[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.10/site-packages', '/usr/share/gdb/python', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_commands.py::test_commands[try_free]', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.10.12, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_commands.py::test_commands[try_free] Running command try_free

Program stopped.
0x00007ffff7fe3290 in _start () from /lib64/ld-linux-x86-64.so.2
'try_free': Check what would happen if free was called with given address.
[33mXFAIL[0m (flaky test)

[33m============================== [33m[1m1 xfailed[0m[33m in 0.16s[0m[33m ==============================[0m

Running with coverage
test_commands[r2pipe]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextsyscall]                                             [33mXPASS[0m
Running with coverage
test_commands[vmmap]                                                   [33mXPASS[0m
Running with coverage
test_commands[hi]                                                      [33mXPASS[0m
Running with coverage
test_commands[plt]                                                     [33mXPASS[0m
Running with coverage
test_commands[dd]                                                      [33mXPASS[0m
Running with coverage
test_commands[stepuntilasm]                                            [33mXPASS[0m
Running with coverage
test_commands[ez]                                                      [33mXPASS[0m
Running with coverage
test_commands[elfsections]                                             [33mXPASS[0m
Running with coverage
test_commands[ds]                                                      [33mXPASS[0m
Running with coverage
test_commands[checksec]                                                [33mXPASS[0m
Running with coverage
test_commands[bugreport]                                               [33mXFAIL[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.10/site-packages', '/usr/share/gdb/python', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_commands.py::test_commands[bugreport]', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.10.12, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_commands.py::test_commands[bugreport] Running command bugreport

Program stopped.
0x00007ffff7fe3290 in _start () from /lib64/ld-linux-x86-64.so.2
[33mXFAIL[0m (flaky test)

[33m============================== [33m[1m1 xfailed[0m[33m in 0.16s[0m[33m ==============================[0m

Running with coverage
test_commands[version]                                                 [33mXPASS[0m
Running with coverage
test_commands[stepsyscall]                                             [33mXPASS[0m
Running with coverage
test_commands[eza]                                                     [33mXPASS[0m
Running with coverage
test_commands[kversion]                                                [33mXPASS[0m
Running with coverage
test_commands[got]                                                     [33mXPASS[0m
Running with coverage
test_commands[pid]                                                     [33mXPASS[0m
Running with coverage
test_commands[ln]                                                      [33mXPASS[0m
Running with coverage
test_commands[break-if-taken]                                          [33mXPASS[0m
Running with coverage
test_commands[xpsr]                                                    [33mXPASS[0m
Running with coverage
test_commands[da]                                                      [33mXPASS[0m
Running with coverage
test_commands[arenas]                                                  [33mXPASS[0m
Running with coverage
test_commands[be]                                                      [33mXPASS[0m
Running with coverage
test_commands[canary]                                                  [33mXPASS[0m
Running with coverage
test_commands[leakfind]                                                [33mXPASS[0m
Running with coverage
test_commands[patch_revert]                                            [33mXPASS[0m
Running with coverage
test_commands[fastbins]                                                [33mXPASS[0m
Running with coverage
test_commands[contextwatch]                                            [33mXPASS[0m
Running with coverage
test_commands[stepsc]                                                  [33mXPASS[0m
Running with coverage
test_commands[rizin]                                                   [33mXPASS[0m
Running with coverage
test_commands[theme]                                                   [33mXPASS[0m
Running with coverage
test_commands[pstate]                                                  [33mXPASS[0m
Running with coverage
test_commands[getpid]                                                  [33mXPASS[0m
Running with coverage
test_commands[probeleak]                                               [33mXPASS[0m
Running with coverage
test_commands[top_chunk]                                               [33mXPASS[0m
Running with coverage
test_commands[args]                                                    [33mXPASS[0m
Running with coverage
test_commands[cpsr]                                                    [33mXPASS[0m
Running with coverage
test_commands_plt_gotplt_got_when_no_sections                          [32mPASSED[0m
Running with coverage
test_command_plt[reference_bin_pie.out-True]                           [32mPASSED[0m
Running with coverage
test_command_plt[reference_bin_nopie.out-False]                        [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary[reference_bin_pie.out-True]         [32mPASSED[0m
Running with coverage
test_command_nextproginstr_binary_not_running                          [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary[reference_bin_nopie.out-False]      [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary_and_loaded_library                  [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextcall]               [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextjump]               [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextproginstr]          [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextret]                [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextsyscall]            [32mPASSED[0m
Running with coverage
test_command_nextproginstr                                             [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[stepret]                [32mPASSED[0m
Running with coverage
test_context_disasm_show_fd_filepath                                   [32mPASSED[0m
Running with coverage
test_empty_context_sections['']                                        [32mPASSED[0m
Running with coverage
test_empty_context_sections[""]                                        [32mPASSED[0m
Running with coverage
test_empty_context_sections[none]                                      [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[stepsyscall]            [32mPASSED[0m
Running with coverage
test_empty_context_sections[-]                                         [32mPASSED[0m
Running with coverage
test_empty_context_sections[]                                          [32mPASSED[0m
Running with coverage
test_source_code_tabstop                                               [32mPASSED[0m
Running with coverage
test_context_disasm_syscalls_args_display                              [32mPASSED[0m
Running with coverage
test_context_backtrace_show_proper_symbol_names                        [32mPASSED[0m
Running with coverage
test_context_disasm_works_properly_with_disasm_flavor_switch           [32mPASSED[0m
Running with coverage
test_context_disasm_proper_render_on_mem_change_issue_1818[False]      [32mPASSED[0m
Running with coverage
test_context_disasm_proper_render_on_mem_change_issue_1818[True]       [32mPASSED[0m
Running with coverage
test_cymbol                                                            [32mPASSED[0m
Running with coverage
test_emulate_disasm                                                    [32mPASSED[0m
Running with coverage
test_emulate_disasm_loop                                               [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params0]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params1]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params2]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params3]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params4]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params5]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params6]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params7]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params8]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params9]                        [32mPASSED[0m
Running with coverage
test_parsing_info_sharedlibrary_to_find_libc_filename[have-(*)]        [32mPASSED[0m
Running with coverage
test_typeinfo_go_x64                                                   [32mPASSED[0m
Running with coverage
test_typeinfo_go_x86                                                   [32mPASSED[0m
Running with coverage
test_parsing_info_sharedlibrary_to_find_libc_filename[does-not-have-(*)] [32mPASSED[0m
Running with coverage
test_hexdump                                                           [32mPASSED[0m
Running with coverage
test_hexdump_collapse_lines                                            [32mPASSED[0m
Running with coverage
test_loads_pure_gdb_without_crashing                                   [32mPASSED[0m
Running with coverage
test_loads_binary_without_crashing                                     [32mPASSED[0m
Running with coverage
test_memory_read_write                                                 [32mPASSED[0m
Running with coverage
test_entry_no_file_loaded                                              [32mPASSED[0m
Running with coverage
test_loads_core_without_crashing                                       [32mPASSED[0m
Running with coverage
test_loads_binary_with_core_without_crashing                           [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_filter                                   [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[True-True]                     [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[False-True]                    [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[True-False]                    [32mPASSED[0m
Running with coverage
test_cannot_run_mmap_when_not_running                                  [32mPASSED[0m
Running with coverage
test_cannot_run_mprotect_when_not_running                              [32mPASSED[0m
Running with coverage
test_mmap_executes_properly                                            [31mFAILED[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.10/site-packages', '/usr/share/gdb/python', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_mmap.py::test_mmap_executes_properly', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.10.12, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_mmap.py::test_mmap_executes_properly 
Program stopped.
0x00007ffff7fe3290 in _start () from /lib64/ld-linux-x86-64.so.2

Temporary breakpoint -2, 0x00007ffff7fe32b0 in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
[31mFAILED[0m

=================================== FAILURES ===================================
[31m[1m_________________________ test_mmap_executes_properly __________________________[0m

start_binary = <function start_binary.<locals>._start_binary at 0x7f4d7608b250>

    [94mdef[39;49;00m [92mtest_mmap_executes_properly[39;49;00m(start_binary):[90m[39;49;00m
    [90m    [39;49;00m[33m"""[39;49;00m
    [33m    Tests the mmap command[39;49;00m
    [33m    """[39;49;00m[90m[39;49;00m
        start_binary(USE_FDS_BINARY)[90m[39;49;00m
    [90m[39;49;00m
        pc = pwndbg.gdblib.regs.pc[90m[39;49;00m
        page_size = pwndbg.lib.memory.PAGE_SIZE[90m[39;49;00m
    [90m[39;49;00m
        [90m# Checks for an mmap(2) error.[39;49;00m[90m[39;49;00m
        [90m#[39;49;00m[90m[39;49;00m
        [90m# mmap(2) is documented to only return a (void*) -1 on failure, but we are a[39;49;00m[90m[39;49;00m
        [90m# little stricter and consider any value on the last page to be a mapping[39;49;00m[90m[39;49;00m
        [90m# error. While technically we don't need to do this, we make the assumption[39;49;00m[90m[39;49;00m
        [90m# that any mapping landing in the last page during a test should warrant[39;49;00m[90m[39;49;00m
        [90m# manual investigation.[39;49;00m[90m[39;49;00m
        [94mdef[39;49;00m [92mis_mmap_error[39;49;00m(ptr):[90m[39;49;00m
            err = (([94m1[39;49;00m << pwndbg.gdblib.arch.ptrsize) - [94m1[39;49;00m) & pwndbg.lib.memory.PAGE_MASK[90m[39;49;00m
            [94mreturn[39;49;00m ptr & pwndbg.lib.memory.PAGE_MASK == err[90m[39;49;00m
    [90m[39;49;00m
        [90m# Checks whether permissions match.[39;49;00m[90m[39;49;00m
        [94mdef[39;49;00m [92mhas_correct_perms[39;49;00m(ptr, perm):[90m[39;49;00m
            page = pwndbg.gdblib.vmmap.find(ptr)[90m[39;49;00m
            [94mreturn[39;49;00m ([90m[39;49;00m
                [95mnot[39;49;00m (page.read ^ ([33m"[39;49;00m[33mr[39;49;00m[33m"[39;49;00m [95min[39;49;00m perm))[90m[39;49;00m
                [95mand[39;49;00m [95mnot[39;49;00m (page.write ^ ([33m"[39;49;00m[33mw[39;49;00m[33m"[39;49;00m [95min[39;49;00m perm))[90m[39;49;00m
                [95mand[39;49;00m [95mnot[39;49;00m (page.execute ^ ([33m"[39;49;00m[33mx[39;49;00m[33m"[39;49;00m [95min[39;49;00m perm))[90m[39;49;00m
            )[90m[39;49;00m
    [90m[39;49;00m
        [90m# Check basic private+anonymous page mmap.[39;49;00m[90m[39;49;00m
        output = gdb.execute([33mf[39;49;00m[33m"[39;49;00m[33mmmap 0x0 [39;49;00m[33m{[39;49;00mpage_size[33m}[39;49;00m[33m"[39;49;00m, to_string=[94mTrue[39;49;00m)[90m[39;49;00m
>       [94massert[39;49;00m output.startswith([33m"[39;49;00m[33mmmap syscall returned [39;49;00m[33m"[39;49;00m)[90m[39;49;00m
[1m[31mE       AssertionError: assert False[0m
[1m[31mE        +  where False = <built-in method startswith of str object at 0x7f4d75eee950>('mmap syscall returned ')[0m
[1m[31mE        +    where <built-in method startswith of str object at 0x7f4d75eee950> = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffa000\n'.startswith[0m

has_correct_perms = <function test_mmap_executes_properly.<locals>.has_correct_perms at 0x7f4d75f4c040>
is_mmap_error = <function test_mmap_executes_properly.<locals>.is_mmap_error at 0x7f4d7608b520>
output     = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffa000\n'
page_size  = 4096
pc         = 140737354019472
start_binary = <function start_binary.<locals>._start_binary at 0x7f4d7608b250>

[1m[31mtests/test_mmap.py[0m:42: AssertionError
[36m[1m=========================== short test summary info ============================[0m
[31mFAILED[0m tests/test_mmap.py::[1mtest_mmap_executes_properly[0m - AssertionError: assert False
 +  where False = <built-in method startswith of str object at 0x7f4d75eee950>('mmap syscall returned ')
 +    where <built-in method startswith of str object at 0x7f4d75eee950> = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffa000\n'.startswith
[31m============================== [31m[1m1 failed[0m[31m in 0.79s[0m[31m ===============================[0m
--------------------------------------------------------------------------------
If you want to debug tests locally, run ./tests.sh with the --pdb flag
--------------------------------------------------------------------------------

Running with coverage
test_mprotect_executes_properly                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[1]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[2]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[3]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[4]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[5]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[0]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[1]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[2]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_invalid_config                                      [32mPASSED[0m
Running with coverage
test_symbol_duplicated_symbols_issue_1610                              [32mPASSED[0m
Running with coverage
test_symbol_get                                                        [32mPASSED[0m
Running with coverage
test_triggers                                                          [32mPASSED[0m
Running with coverage
test_windbg_dX_commands                                                [32mPASSED[0m
Running with coverage
test_windbg_eX_commands                                                [32mPASSED[0m
Running with coverage
test_windbg_commands_x86                                               [32mPASSED[0m
Running with coverage
test_find_fake_fast_command                                            [32mPASSED[0m
Running with coverage
test_malloc_chunk_command                                              [32mPASSED[0m
Running with coverage
test_malloc_chunk_command_heuristic                                    [32mPASSED[0m
Running with coverage
test_main_arena_heuristic                                              [32mPASSED[0m
Running with coverage
test_mp_heuristic                                                      [32mPASSED[0m
Running with coverage
test_thread_cache_heuristic[single-threaded]                           [32mPASSED[0m
Running with coverage
test_thread_cache_heuristic[multi-threaded]                            [32mPASSED[0m
Running with coverage
test_thread_arena_heuristic[single-threaded]                           [32mPASSED[0m
Running with coverage
test_thread_arena_heuristic[multi-threaded]                            [32mPASSED[0m
Running with coverage
test_global_max_fast_heuristic                                         [32mPASSED[0m
Running with coverage
test_heuristic_fail_gracefully[single-threaded]                        [32mPASSED[0m
Running with coverage
test_heuristic_fail_gracefully[multi-threaded]                         [32mPASSED[0m
Running with coverage
test_heap_bins                                                         [32mPASSED[0m
Running with coverage
test_largebins_size_range_64bit                                        [32mPASSED[0m
Running with coverage
test_largebins_size_range_32bit_big                                    [32mPASSED[0m
Running with coverage
test_smallbins_sizes_64bit                                             [32mPASSED[0m
Running with coverage
test_smallbins_sizes_32bit_big                                         [32mPASSED[0m
Running with coverage
test_try_free_invalid_overflow                                         [32mPASSED[0m
Running with coverage
test_try_free_invalid_misaligned                                       [32mPASSED[0m
Running with coverage
test_try_free_invalid_size_minsize                                     [32mPASSED[0m
Running with coverage
test_try_free_invalid_size_misaligned                                  [32mPASSED[0m
Running with coverage
test_try_free_double_free_tcache                                       [32mPASSED[0m
Running with coverage
test_try_free_double_free                                              [32mPASSED[0m
Running with coverage
test_try_free_invalid_next_size_fast                                   [32mPASSED[0m
Running with coverage
test_try_free_invalid_fastbin_entry                                    [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_top                            [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_out                            [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_prev                           [32mPASSED[0m
Running with coverage
test_try_free_invalid_next_size_normal                                 [32mPASSED[0m
test_try_free_corrupted_consolidate_backward                           [32mPASSED[0m
test_try_free_corrupted_unsorted_chunks                                [33mSKIPPED[0m
test_vis_heap_chunk_command                                            [32mPASSED[0m
Tests completed in 162 seconds

*********************************
********* TESTS SUMMARY *********
*********************************
Tests passed or skipped: 358
Tests failed: 1

Failing tests: tests/test_mmap.py::test_mmap_executes_properly
##[error]Process completed with exit code 1.

step_name: tests (ubuntu-20.04)/6_Run tests.txt
log: ##[group]Run mkdir .cov
[36;1mmkdir .cov[0m
[36;1msudo sysctl -w kernel.yama.ptrace_scope=0[0m
[36;1m./tests.sh --cov[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
kernel.yama.ptrace_scope = 0
[+] Building tls.i386.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target i386-linux-gnu \
-o tls.i386.out tls.i386.c
[+] Building heap_bugs.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-Wno-int-to-pointer-cast -Wno-int-conversion -Wno-unused-variable \
-target native-native-gnu.2.33 \
-Wl,-rpath=/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/binaries/glibcs/2.33:\
-Wl,--dynamic-linker=/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/binaries/glibcs/2.33/ld-linux-x86-64.so.2 \
-o heap_bugs.out heap_bugs.c
[+] Building 'initialized_heap.out'
[+] Building 'tabstop.out'
[+] Building 'search_memory.out'
[+] Building 'heap_bins.out'
[+] Building 'div_zero.out'
[+] Building multiple_threads.out
gcc -g -O0 -o multiple_threads.out multiple_threads.c -pthread -lpthread
[+] Building 'telescope_binary.out'
[+] Building 'reference-binary-net.out'
[+] Building tls.x86-64.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target x86_64-linux-gnu \
-o tls.x86-64.out tls.x86-64.c
[+] Building 'heap_find_fake_fast.out'
[+] Building 'reference-binary.out'
[+] Building heap_malloc_chunk.out
gcc -g -O0 -Wno-nonnull -Wno-unused-result -o heap_malloc_chunk.out heap_malloc_chunk.c -pthread -lpthread
[+] Building heap_vis.out
gcc -g -O0 -Wno-nonnull -o heap_vis.out heap_vis.c -pthread -lpthread
[+] Building 'very_long_symbols.out'
[+] Building 'linked-lists.out'
[+] Building 'use-fds.out'
[+] Building issue_1565.out
gcc -g -O0 -o issue_1565.out issue_1565.c -pthread -lpthread
[+] Building 'emulate_disasm.o'
[+] Linking 'emulate_disasm.out'
[+] Building 'conditional_branch_breakpoints_x64.o'
[+] Linking 'conditional_branch_breakpoints_x64.out'
[+] Building 'memory.o'
[+] Linking 'memory.out'
[+] Building 'emulate_disasm_loop.o'
[+] Linking 'emulate_disasm_loop.out'
[+] Building 'syscalls-x64.o'
[+] Linking 'syscalls-x64.out'
[+] Building 'stepuntilasm_x64.o'
[+] Linking 'stepuntilasm_x64.out'
[+] Building 'gosample.x86'
[+] Building 'gosample.x64'
[+] Building reference_bin_pie.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fpie -o reference_bin_pie.out reference-binary.c
[+] Building reference_bin_nopie.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fno-pie -o reference_bin_nopie.out reference-binary.c
g++ -O0 -ggdb -Wno-pmf-conversions symbol_1600_and_752.cpp -o symbol_1600_and_752.out
[+] Building initialized_heap_x64.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target x86_64-linux-gnu \
-o initialized_heap_x64.out initialized_heap.c
[+] Building initialized_heap_i386_big.out
/home/runner/work/pwndbg/pwndbg/.zig/zig cc \
-Wall -DDEBUG=1 -ggdb -O0 -gdwarf-4 \
-target i386-linux-gnu \
-o initialized_heap_i386_big.out initialized_heap.c
[+] Building linked-lists.c
/home/runner/work/pwndbg/pwndbg/.zig/zig cc -fpie -g -o linked_lists.out linked-lists.c
rm syscalls-x64.o conditional_branch_breakpoints_x64.o emulate_disasm_loop.o emulate_disasm.o stepuntilasm_x64.o memory.o
Will run codecov
ZIGPATH set to /home/runner/work/pwndbg/pwndbg/.zig

Running tests in parallel
Running with coverage
Running with coverage
Running with coverage
Running with coverage
test_attachp_command_attaches_to_procname_resolve_none_no_truncate     [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_none                 [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_pid                                   [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname                              [32mPASSED[0m
Running with coverage
test_attachp_command_nonexistent_procname                              [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_ask                  [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_oldest               [32mPASSED[0m
Running with coverage
test_attachp_command_attaches_to_procname_resolve_newest               [32mPASSED[0m
Running with coverage
test_cache_single_value                                                [32mPASSED[0m
Running with coverage
test_cache_args_kwargs_properly                                        [32mPASSED[0m
Running with coverage
test_command_break_if_x64[x86-64]                                      [32mPASSED[0m
Running with coverage
test_attachp_command_no_pids                                           [32mPASSED[0m
Running with coverage
test_config                                                            [32mPASSED[0m
Running with coverage
test_config_filtering                                                  [32mPASSED[0m
Running with coverage
test_config_filtering_missing                                          [32mPASSED[0m
Running with coverage
test_command_cyclic_value                                              [32mPASSED[0m
Running with coverage
test_command_cyclic_address                                            [32mPASSED[0m
Running with coverage
test_command_cyclic_register                                           [32mPASSED[0m
Running with coverage
test_command_cyclic_wrong_alphabet                                     [32mPASSED[0m
Running with coverage
test_command_cyclic_wrong_length                                       [32mPASSED[0m
Running with coverage
test_command_distance                                                  [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_set                                  [32mPASSED[0m
Running with coverage
test_command_errno                                                     [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_set_remove                           [32mPASSED[0m
Running with coverage
test_command_ignore_no_breakpoint_found                                [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_found_two                          [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_negative                           [32mPASSED[0m
Running with coverage
test_command_ignore_breakpoint_last_found_one                          [32mPASSED[0m
Running with coverage
test_command_killthreads_kills_all_threads_except_current              [32mPASSED[0m
Running with coverage
test_command_killthreads_before_binary_start                           [32mPASSED[0m
Running with coverage
test_command_killthreads_kills_specific_thread                         [32mPASSED[0m
Running with coverage
test_command_killthreads_produces_error_when_unknown_thread_passed     [32mPASSED[0m
Running with coverage
test_command_plist_flat_no_flags                                       [32mPASSED[0m
Running with coverage
test_command_plist_flat_field                                          [32mPASSED[0m
Running with coverage
test_command_plist_flat_sentinel                                       [32mPASSED[0m
Running with coverage
test_command_plist_nested_direct                                       [32mPASSED[0m
Running with coverage
test_command_plist_nested_indirect                                     [32mPASSED[0m
Running with coverage
test_command_procinfo_before_binary_start                              [32mPASSED[0m
Running with coverage
test_command_procinfo                                                  [32mPASSED[0m
Running with coverage
test_command_search_limit                                              [32mPASSED[0m
Running with coverage
test_command_search_step                                               [32mPASSED[0m
Running with coverage
test_command_search_alignment                                          [32mPASSED[0m
Running with coverage
test_command_search_byte_width                                         [32mPASSED[0m
Running with coverage
test_command_search_word_width                                         [32mPASSED[0m
Running with coverage
test_command_search_dword_width                                        [32mPASSED[0m
Running with coverage
test_command_search_rwx                                                [32mPASSED[0m
Running with coverage
test_command_untilasm_x64                                              [32mPASSED[0m
Running with coverage
test_command_search_qword_width                                        [32mPASSED[0m
Running with coverage
test_command_telescope                                                 [32mPASSED[0m
Running with coverage
test_command_telescope_reverse                                         [32mPASSED[0m
Running with coverage
test_command_telescope_n_records                                       [32mPASSED[0m
Running with coverage
test_telescope_command_with_address_as_count                           [32mPASSED[0m
Running with coverage
test_telescope_command_with_address_as_count_and_reversed_flag         [32mPASSED[0m
Running with coverage
test_command_telescope_reverse_skipped_records_shows_input_address     [32mPASSED[0m
Running with coverage
test_command_telescope_frame                                           [32mPASSED[0m
Running with coverage
test_command_telescope_frame_bp_below_sp                               [32mPASSED[0m
Running with coverage
test_command_telescope_frame_bp_sp_different_vmmaps                    [32mPASSED[0m
Running with coverage
test_tls_address_and_command[x86-64]                                   [32mPASSED[0m
Running with coverage
test_tls_address_and_command[i386]                                     [32mPASSED[0m
Running with coverage
test_command_vmmap_on_coredump_on_crash_simple_binary[False]           [32mPASSED[0m
Running with coverage
test_command_vmmap_on_coredump_on_crash_simple_binary[True]            [32mPASSED[0m
Running with coverage
test_command_xor_with_gdb_execute                                      [32mPASSED[0m
Running with coverage
test_command_xor_with_int                                              [32mPASSED[0m
Running with coverage
test_vmmap_issue_1565                                                  [32mPASSED[0m
Running with coverage
test_command_xor_with_hex                                              [32mPASSED[0m
Running with coverage
test_command_memfrob                                                   [32mPASSED[0m
Running with coverage
test_commands[p2p]                                                     [33mXPASS[0m
Running with coverage
test_commands[breakrva]                                                [33mXPASS[0m
Running with coverage
test_commands[got-call-status]                                         [33mXPASS[0m
Running with coverage
test_commands[pwndbg]                                                  [33mXPASS[0m
Running with coverage
test_commands[kversion]                                                [33mXPASS[0m
Running with coverage
test_commands[try_free]                                                [33mXFAIL[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.8/site-packages', '/usr/share/gdb/python', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_commands.py::test_commands[try_free]', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.8.10, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_commands.py::test_commands[try_free] Running command try_free

Program stopped.
0x00007ffff7fd0100 in _start () from /lib64/ld-linux-x86-64.so.2
'try_free': Check what would happen if free was called with given address.
[33mXFAIL[0m (flaky test)

[33m============================== [33m[1m1 xfailed[0m[33m in 0.12s[0m[33m ==============================[0m

Running with coverage
test_commands[errno]                                                   [33mXPASS[0m
Running with coverage
test_commands[patch_list]                                              [33mXPASS[0m
Running with coverage
test_commands[mp]                                                      [33mXPASS[0m
Running with coverage
test_commands[up]                                                      [33mXPASS[0m
Running with coverage
test_commands[got]                                                     [33mXPASS[0m
Running with coverage
test_commands[cyclic]                                                  [33mXPASS[0m
Running with coverage
test_commands[vmmap_load]                                              [33mXPASS[0m
Running with coverage
test_commands[regs]                                                    [33mXPASS[0m
Running with coverage
test_commands[ez]                                                      [33mXPASS[0m
Running with coverage
test_commands[r2]                                                      [33mXPASS[0m
Running with coverage
test_commands[eb]                                                      [33mXPASS[0m
Running with coverage
test_commands[arena]                                                   [33mXPASS[0m
Running with coverage
test_commands[unsortedbin]                                             [33mXPASS[0m
Running with coverage
test_commands[peb]                                                     [33mXPASS[0m
Running with coverage
test_commands[theme]                                                   [33mXPASS[0m
Running with coverage
test_commands[dqs]                                                     [33mXPASS[0m
Running with coverage
test_commands[memoize]                                                 [33mXPASS[0m
Running with coverage
test_commands[j]                                                       [33mXPASS[0m
Running with coverage
test_commands[vmmap_clear]                                             [33mXPASS[0m
Running with coverage
test_commands[asm]                                                     [33mXPASS[0m
Running with coverage
test_commands[gotplt]                                                  [33mXPASS[0m
Running with coverage
test_commands[leakfind]                                                [33mXPASS[0m
Running with coverage
test_commands[plt]                                                     [33mXPASS[0m
Running with coverage
test_commands[mprotect]                                                [33mXPASS[0m
Running with coverage
test_commands[probeleak]                                               [33mXPASS[0m
Running with coverage
test_commands[nextcall]                                                [33mXPASS[0m
Running with coverage
test_commands[ed]                                                      [33mXPASS[0m
Running with coverage
test_commands[main]                                                    [33mXPASS[0m
Running with coverage
test_commands[kbase]                                                   [33mXPASS[0m
Running with coverage
test_commands[tips]                                                    [33mXPASS[0m
Running with coverage
test_commands[dd]                                                      [33mXPASS[0m
Running with coverage
test_commands[top_chunk]                                               [33mXPASS[0m
Running with coverage
test_commands[nextret]                                                 [33mXPASS[0m
Running with coverage
test_commands[mmap]                                                    [33mXPASS[0m
Running with coverage
test_commands[kd]                                                      [33mXPASS[0m
Running with coverage
test_commands[arenas]                                                  [33mXPASS[0m
Running with coverage
test_commands[brva]                                                    [33mXPASS[0m
Running with coverage
test_commands[themefile]                                               [33mXPASS[0m
Running with coverage
test_commands[config]                                                  [33mXPASS[0m
Running with coverage
test_commands[argc]                                                    [33mXPASS[0m
Running with coverage
test_commands[eza]                                                     [33mXPASS[0m
Running with coverage
test_commands[find_fake_fast]                                          [33mXPASS[0m
Running with coverage
test_commands[stepuntilasm]                                            [33mXPASS[0m
Running with coverage
test_commands[piebase]                                                 [33mXPASS[0m
Running with coverage
test_commands[dps]                                                     [33mXPASS[0m
Running with coverage
test_commands[retaddr]                                                 [33mXPASS[0m
Running with coverage
test_commands[auxv]                                                    [33mXPASS[0m
Running with coverage
test_commands[rop]                                                     [33mXPASS[0m
Running with coverage
test_commands[ln]                                                      [33mXPASS[0m
Running with coverage
test_commands[ds]                                                      [33mXPASS[0m
Running with coverage
test_commands[entry]                                                   [33mXPASS[0m
Running with coverage
test_commands[pid]                                                     [33mXPASS[0m
Running with coverage
test_commands[break-if-taken]                                          [33mXPASS[0m
Running with coverage
test_commands[pstate]                                                  [33mXPASS[0m
Running with coverage
test_commands[hi]                                                      [33mXPASS[0m
Running with coverage
test_commands[dc]                                                      [33mXPASS[0m
Running with coverage
test_commands[emulate]                                                 [33mXPASS[0m
Running with coverage
test_commands[bl]                                                      [33mXPASS[0m
Running with coverage
test_commands[distance]                                                [33mXPASS[0m
Running with coverage
test_commands[stackf]                                                  [33mXPASS[0m
Running with coverage
test_commands[radare2]                                                 [33mXPASS[0m
Running with coverage
test_commands[linkmap]                                                 [33mXPASS[0m
Running with coverage
test_commands[stepsyscall]                                             [33mXPASS[0m
Running with coverage
test_commands[elfsections]                                             [33mXPASS[0m
Running with coverage
test_commands[ctx]                                                     [33mXPASS[0m
Running with coverage
test_commands[break-if-not-taken]                                      [33mXPASS[0m
Running with coverage
test_commands[version]                                                 [33mXPASS[0m
Running with coverage
test_commands[cymbol]                                                  [33mXPASS[0m
Running with coverage
test_commands[rizin]                                                   [33mXPASS[0m
Running with coverage
test_commands[attachp]                                                 [33mXPASS[0m
Running with coverage
test_commands[nextsc]                                                  [33mXPASS[0m
Running with coverage
test_commands[sigreturn]                                               [33mXPASS[0m
Running with coverage
test_commands[spray]                                                   [33mXPASS[0m
Running with coverage
test_commands[contextunwatch]                                          [33mXPASS[0m
Running with coverage
test_commands[heap]                                                    [33mXPASS[0m
Running with coverage
test_commands[bugreport]                                               [33mXFAIL[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.8/site-packages', '/usr/share/gdb/python', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_commands.py::test_commands[bugreport]', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.8.10, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_commands.py::test_commands[bugreport] Running command bugreport

Program stopped.
0x00007ffff7fd0100 in _start () from /lib64/ld-linux-x86-64.so.2
[33mXFAIL[0m (flaky test)

[33m============================== [33m[1m1 xfailed[0m[33m in 0.14s[0m[33m ==============================[0m

Running with coverage
test_commands[libs]                                                    [33mXPASS[0m
Running with coverage
test_commands[ctx-watch]                                               [33mXPASS[0m
Running with coverage
test_commands[da]                                                      [33mXPASS[0m
Running with coverage
test_commands[be]                                                      [33mXPASS[0m
Running with coverage
test_commands[lm]                                                      [33mXPASS[0m
Running with coverage
test_commands[reload]                                                  [33mXPASS[0m
Running with coverage
test_commands[bc]                                                      [33mXPASS[0m
Running with coverage
test_commands[xor]                                                     [33mXPASS[0m
Running with coverage
test_commands[xpsr]                                                    [33mXPASS[0m
Running with coverage
test_commands[bp]                                                      [33mXPASS[0m
Running with coverage
test_commands[telescope]                                               [33mXPASS[0m
Running with coverage
test_commands[bins]                                                    [33mXPASS[0m
Running with coverage
test_commands[search]                                                  [33mXPASS[0m
Running with coverage
test_commands[contextoutput]                                           [33mXPASS[0m
Running with coverage
test_commands[ghidra]                                                  [33mXPASS[0m
Running with coverage
test_commands[r2pipe]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextsyscall]                                             [33mXPASS[0m
Running with coverage
test_commands[xinfo]                                                   [33mXPASS[0m
Running with coverage
test_commands[address]                                                 [33mXPASS[0m
Running with coverage
test_commands[patch]                                                   [33mXPASS[0m
Running with coverage
test_commands[kchecksec]                                               [33mXPASS[0m
Running with coverage
test_commands[rz]                                                      [33mXPASS[0m
Running with coverage
test_commands[plist]                                                   [33mXPASS[0m
Running with coverage
test_commands[down]                                                    [33mXPASS[0m
Running with coverage
test_commands[getfile]                                                 [33mXPASS[0m
Running with coverage
test_commands[procinfo]                                                [33mXPASS[0m
Running with coverage
test_commands[ctx-out]                                                 [33mXPASS[0m
Running with coverage
test_commands[pc]                                                      [33mXPASS[0m
Running with coverage
test_commands[threads]                                                 [33mXPASS[0m
Running with coverage
test_commands[tcachebins]                                              [33mXPASS[0m
Running with coverage
test_commands[dds]                                                     [33mXPASS[0m
Running with coverage
test_commands[start]                                                   [33mXPASS[0m
Running with coverage
test_commands[comm]                                                    [33mXPASS[0m
Running with coverage
test_commands[envp]                                                    [33mXPASS[0m
Running with coverage
test_commands[nextjump]                                                [33mXPASS[0m
Running with coverage
test_commands[memfrob]                                                 [33mXPASS[0m
Running with coverage
test_commands[heap_config]                                             [33mXPASS[0m
Running with coverage
test_commands[canary]                                                  [33mXPASS[0m
Running with coverage
test_commands[nearpc]                                                  [33mXPASS[0m
Running with coverage
test_commands[nextjmp]                                                 [33mXPASS[0m
Running with coverage
test_commands[hexdump]                                                 [33mXPASS[0m
Running with coverage
test_commands[cwatch]                                                  [33mXPASS[0m
Running with coverage
test_commands[ctx-unwatch]                                             [33mXPASS[0m
Running with coverage
test_commands[gsbase]                                                  [33mXPASS[0m
Running with coverage
test_commands[save_ida]                                                [33mXPASS[0m
Running with coverage
test_commands[vmmap]                                                   [33mXPASS[0m
Running with coverage
test_commands[dw]                                                      [33mXPASS[0m
Running with coverage
test_commands[dt]                                                      [33mXPASS[0m
Running with coverage
test_commands[vis_heap_chunks]                                         [33mXPASS[0m
Running with coverage
test_commands[slab]                                                    [33mXPASS[0m
Running with coverage
test_commands[vmmap_add]                                               [33mXPASS[0m
Running with coverage
test_commands[u]                                                       [33mXPASS[0m
Running with coverage
test_commands[tcache]                                                  [33mXPASS[0m
Running with coverage
test_commands[aslr]                                                    [33mXPASS[0m
Running with coverage
test_commands[kconfig]                                                 [33mXPASS[0m
Running with coverage
test_commands[setflag]                                                 [33mXPASS[0m
Running with coverage
test_commands[checksec]                                                [33mXPASS[0m
Running with coverage
test_commands[getpid]                                                  [33mXPASS[0m
Running with coverage
test_commands[patch_revert]                                            [33mXPASS[0m
Running with coverage
test_commands[args]                                                    [33mXPASS[0m
Running with coverage
test_commands[fsbase]                                                  [33mXPASS[0m
Running with coverage
test_commands[rzpipe]                                                  [33mXPASS[0m
Running with coverage
test_commands[so]                                                      [33mXPASS[0m
Running with coverage
test_commands[env]                                                     [33mXPASS[0m
Running with coverage
test_commands[context]                                                 [33mXPASS[0m
Running with coverage
test_commands[environ]                                                 [33mXPASS[0m
Running with coverage
test_commands[killthreads]                                             [33mXPASS[0m
Running with coverage
test_commands[malloc_chunk]                                            [33mXPASS[0m
Running with coverage
test_commands[go]                                                      [33mXPASS[0m
Running with coverage
test_commands[eq]                                                      [33mXPASS[0m
Running with coverage
test_commands[stepover]                                                [33mXPASS[0m
Running with coverage
test_commands[stepret]                                                 [33mXPASS[0m
Running with coverage
test_commands[xuntil]                                                  [33mXPASS[0m
Running with coverage
test_commands[ew]                                                      [33mXPASS[0m
Running with coverage
test_commands[reinit_pwndbg]                                           [33mXPASS[0m
Running with coverage
test_commands[ropper]                                                  [33mXPASS[0m
Running with coverage
test_commands[k]                                                       [33mXPASS[0m
Running with coverage
test_commands[kcmdline]                                                [33mXPASS[0m
Running with coverage
test_commands[largebins]                                               [33mXPASS[0m
Running with coverage
test_commands[sstart]                                                  [33mXPASS[0m
Running with coverage
test_commands[enable-got-tracking]                                     [33mXPASS[0m
Running with coverage
test_commands[pdisass]                                                 [33mXPASS[0m
Running with coverage
test_commands[contextwatch]                                            [33mXPASS[0m
Running with coverage
test_commands[ignore]                                                  [33mXPASS[0m
Running with coverage
test_commands[smallbins]                                               [33mXPASS[0m
Running with coverage
test_commands[cunwatch]                                                [33mXPASS[0m
Running with coverage
test_commands[db]                                                      [33mXPASS[0m
Running with coverage
test_commands[argv]                                                    [33mXPASS[0m
Running with coverage
test_commands[fastbins]                                                [33mXPASS[0m
Running with coverage
test_commands[flag]                                                    [33mXPASS[0m
Running with coverage
test_commands[bd]                                                      [33mXPASS[0m
Running with coverage
test_commands[configfile]                                              [33mXPASS[0m
Running with coverage
test_commands[vprot]                                                   [33mXPASS[0m
Running with coverage
test_commands[init]                                                    [33mXPASS[0m
Running with coverage
test_commands[dq]                                                      [33mXPASS[0m
Running with coverage
test_commands[tls]                                                     [33mXPASS[0m
Running with coverage
test_commands[ropgadget]                                               [33mXPASS[0m
Running with coverage
test_commands[stack]                                                   [33mXPASS[0m
Running with coverage
test_commands[cpsr]                                                    [33mXPASS[0m
Running with coverage
test_commands[dumpargs]                                                [33mXPASS[0m
Running with coverage
test_commands[valist]                                                  [33mXPASS[0m
Running with coverage
test_commands[stepsc]                                                  [33mXPASS[0m
Running with coverage
test_commands[disable-got-tracking]                                    [33mXPASS[0m
Running with coverage
test_commands[ai]                                                      [33mXPASS[0m
Running with coverage
test_command_plt[reference_bin_pie.out-True]                           [32mPASSED[0m
Running with coverage
test_commands_plt_gotplt_got_when_no_sections                          [32mPASSED[0m
Running with coverage
test_command_plt[reference_bin_nopie.out-False]                        [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary[reference_bin_pie.out-True]         [32mPASSED[0m
Running with coverage
test_command_nextproginstr_binary_not_running                          [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary[reference_bin_nopie.out-False]      [32mPASSED[0m
Running with coverage
test_command_got_for_target_binary_and_loaded_library                  [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextcall]               [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextjump]               [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextproginstr]          [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextret]                [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[nextsyscall]            [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[stepret]                [32mPASSED[0m
Running with coverage
test_context_disasm_show_fd_filepath                                   [32mPASSED[0m
Running with coverage
test_empty_context_sections['']                                        [32mPASSED[0m
Running with coverage
test_next_command_doesnt_freeze_crashed_binary[stepsyscall]            [32mPASSED[0m
Running with coverage
test_empty_context_sections[""]                                        [32mPASSED[0m
Running with coverage
test_empty_context_sections[none]                                      [32mPASSED[0m
Running with coverage
test_empty_context_sections[-]                                         [32mPASSED[0m
Running with coverage
test_empty_context_sections[]                                          [32mPASSED[0m
Running with coverage
test_context_disasm_syscalls_args_display                              [32mPASSED[0m
Running with coverage
test_source_code_tabstop                                               [32mPASSED[0m
Running with coverage
test_context_backtrace_show_proper_symbol_names                        [32mPASSED[0m
Running with coverage
test_context_disasm_works_properly_with_disasm_flavor_switch           [32mPASSED[0m
Running with coverage
test_context_disasm_proper_render_on_mem_change_issue_1818[True]       [32mPASSED[0m
Running with coverage
test_context_disasm_proper_render_on_mem_change_issue_1818[False]      [32mPASSED[0m
Running with coverage
test_cymbol                                                            [32mPASSED[0m
Running with coverage
test_emulate_disasm                                                    [32mPASSED[0m
Running with coverage
test_emulate_disasm_loop                                               [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params0]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params1]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params2]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params3]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params4]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params5]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params6]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params7]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params8]                        [32mPASSED[0m
Running with coverage
test_gdb_parameter_default_value_works[params9]                        [32mPASSED[0m
Running with coverage
test_parsing_info_sharedlibrary_to_find_libc_filename[have-(*)]        [32mPASSED[0m
Running with coverage
test_typeinfo_go_x64                                                   [32mPASSED[0m
Running with coverage
test_typeinfo_go_x86                                                   [32mPASSED[0m
Running with coverage
test_parsing_info_sharedlibrary_to_find_libc_filename[does-not-have-(*)] [32mPASSED[0m
Running with coverage
test_hexdump                                                           [32mPASSED[0m
Running with coverage
test_hexdump_collapse_lines                                            [32mPASSED[0m
Running with coverage
test_loads_pure_gdb_without_crashing                                   [32mPASSED[0m
Running with coverage
test_loads_binary_without_crashing                                     [32mPASSED[0m
Running with coverage
test_loads_binary_with_core_without_crashing                           [32mPASSED[0m
Running with coverage
test_loads_core_without_crashing                                       [32mPASSED[0m
Running with coverage
test_entry_no_file_loaded                                              [32mPASSED[0m
Running with coverage
test_memory_read_write                                                 [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_filter                                   [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[True-True]                     [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[False-True]                    [32mPASSED[0m
Running with coverage
test_list_and_filter_commands_full_list[True-False]                    [32mPASSED[0m
Running with coverage
test_mmap_executes_properly                                            [31mFAILED[0m

pwndbg: loaded 156 pwndbg commands and 47 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $ida GDB functions (can be used with print/break)
['/home/runner/work/pwndbg/pwndbg', '/home/runner/work/pwndbg/pwndbg/.venv/lib/python3.8/site-packages', '/usr/share/gdb/python', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/runner/work/pwndbg/pwndbg']
Launching pytest with args: ['/home/runner/work/pwndbg/pwndbg/tests/gdb-tests/tests/test_mmap.py::test_mmap_executes_properly', '-vvv', '-s', '--showlocals', '--color=yes']
[1m============================= test session starts ==============================[0m
platform linux -- Python 3.8.10, pytest-7.3.1, pluggy-1.3.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/pwndbg/pwndbg/tests/gdb-tests
plugins: cov-4.1.0
[1mcollecting ... [0mcollected 1 item

tests/test_mmap.py::test_mmap_executes_properly 
Program stopped.
0x00007ffff7fd0100 in _start () from /lib64/ld-linux-x86-64.so.2

Temporary breakpoint -8, 0x00007ffff7fd0120 in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
[31mFAILED[0m

=================================== FAILURES ===================================
[31m[1m_________________________ test_mmap_executes_properly __________________________[0m

start_binary = <function start_binary.<locals>._start_binary at 0x7f84fc310550>

    [34;01mdef[39;49;00m [32;01mtest_mmap_executes_properly[39;49;00m(start_binary):
        [33m"""[39;49;00m
    [33m    Tests the mmap command[39;49;00m
    [33m    """[39;49;00m
        start_binary(USE_FDS_BINARY)
    
        pc = pwndbg.gdblib.regs.pc
        page_size = pwndbg.lib.memory.PAGE_SIZE
    
        [30;01m# Checks for an mmap(2) error.[39;49;00m
        [30;01m#[39;49;00m
        [30;01m# mmap(2) is documented to only return a (void*) -1 on failure, but we are a[39;49;00m
        [30;01m# little stricter and consider any value on the last page to be a mapping[39;49;00m
        [30;01m# error. While technically we don't need to do this, we make the assumption[39;49;00m
        [30;01m# that any mapping landing in the last page during a test should warrant[39;49;00m
        [30;01m# manual investigation.[39;49;00m
        [34;01mdef[39;49;00m [32;01mis_mmap_error[39;49;00m(ptr):
            err = (([34;01m1[39;49;00m << pwndbg.gdblib.arch.ptrsize) - [34;01m1[39;49;00m) & pwndbg.lib.memory.PAGE_MASK
            [34;01mreturn[39;49;00m ptr & pwndbg.lib.memory.PAGE_MASK == err
    
        [30;01m# Checks whether permissions match.[39;49;00m
        [34;01mdef[39;49;00m [32;01mhas_correct_perms[39;49;00m(ptr, perm):
            page = pwndbg.gdblib.vmmap.find(ptr)
            [34;01mreturn[39;49;00m (
                [35;01mnot[39;49;00m (page.read ^ ([33m"[39;49;00m[33mr[39;49;00m[33m"[39;49;00m [35;01min[39;49;00m perm))
                [35;01mand[39;49;00m [35;01mnot[39;49;00m (page.write ^ ([33m"[39;49;00m[33mw[39;49;00m[33m"[39;49;00m [35;01min[39;49;00m perm))
                [35;01mand[39;49;00m [35;01mnot[39;49;00m (page.execute ^ ([33m"[39;49;00m[33mx[39;49;00m[33m"[39;49;00m [35;01min[39;49;00m perm))
            )
    
        [30;01m# Check basic private+anonymous page mmap.[39;49;00m
        output = gdb.execute(f[33m"[39;49;00m[33mmmap 0x0 {page_size}[39;49;00m[33m"[39;49;00m, to_string=[36;01mTrue[39;49;00m)
>       [34;01massert[39;49;00m output.startswith([33m"[39;49;00m[33mmmap syscall returned [39;49;00m[33m"[39;49;00m)
[1m[31mE       AssertionError: assert False[0m
[1m[31mE        +  where False = <built-in method startswith of str object at 0x7f84fc084960>('mmap syscall returned ')[0m
[1m[31mE        +    where <built-in method startswith of str object at 0x7f84fc084960> = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffb000\n'.startswith[0m

has_correct_perms = <function test_mmap_executes_properly.<locals>.has_correct_perms at 0x7f84fc27d0d0>
is_mmap_error = <function test_mmap_executes_properly.<locals>.is_mmap_error at 0x7f84fc27d040>
output     = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffb000\n'
page_size  = 4096
pc         = 140737353941248
start_binary = <function start_binary.<locals>._start_binary at 0x7f84fc310550>

[1m[31mtests/test_mmap.py[0m:42: AssertionError
[36m[1m=========================== short test summary info ============================[0m
[31mFAILED[0m tests/test_mmap.py::[1mtest_mmap_executes_properly[0m - AssertionError: assert False
 +  where False = <built-in method startswith of str object at 0x7f84fc084960>('mmap syscall returned ')
 +    where <built-in method startswith of str object at 0x7f84fc084960> = 'Handling BPStop\nmmap syscall returned 0x7ffff7ffb000\n'.startswith
[31m============================== [31m[1m1 failed[0m[31m in 0.75s[0m[31m ===============================[0m
--------------------------------------------------------------------------------
If you want to debug tests locally, run ./tests.sh with the --pdb flag
--------------------------------------------------------------------------------

Running with coverage
test_cannot_run_mmap_when_not_running                                  [32mPASSED[0m
Running with coverage
test_mprotect_executes_properly                                        [32mPASSED[0m
Running with coverage
test_cannot_run_mprotect_when_not_running                              [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[1]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[2]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[3]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[4]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_bytes[5]                                            [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[0]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[1]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_seperator[2]                                        [32mPASSED[0m
Running with coverage
test_nearpc_opcode_invalid_config                                      [32mPASSED[0m
Running with coverage
test_symbol_get                                                        [32mPASSED[0m
Running with coverage
test_symbol_duplicated_symbols_issue_1610                              [32mPASSED[0m
Running with coverage
test_triggers                                                          [32mPASSED[0m
Running with coverage
test_windbg_dX_commands                                                [32mPASSED[0m
Running with coverage
test_windbg_eX_commands                                                [32mPASSED[0m
Running with coverage
test_windbg_commands_x86                                               [32mPASSED[0m
Running with coverage
test_find_fake_fast_command                                            [32mPASSED[0m
Running with coverage
test_malloc_chunk_command                                              [32mPASSED[0m
Running with coverage
test_malloc_chunk_command_heuristic                                    [32mPASSED[0m
Running with coverage
test_main_arena_heuristic                                              [32mPASSED[0m
Running with coverage
test_mp_heuristic                                                      [32mPASSED[0m
Running with coverage
test_thread_cache_heuristic[single-threaded]                           [32mPASSED[0m
Running with coverage
test_thread_cache_heuristic[multi-threaded]                            [32mPASSED[0m
Running with coverage
test_thread_arena_heuristic[single-threaded]                           [32mPASSED[0m
Running with coverage
test_thread_arena_heuristic[multi-threaded]                            [32mPASSED[0m
Running with coverage
test_global_max_fast_heuristic                                         [32mPASSED[0m
Running with coverage
test_heuristic_fail_gracefully[single-threaded]                        [32mPASSED[0m
Running with coverage
test_heuristic_fail_gracefully[multi-threaded]                         [32mPASSED[0m
Running with coverage
test_heap_bins                                                         [32mPASSED[0m
Running with coverage
test_largebins_size_range_64bit                                        [32mPASSED[0m
Running with coverage
test_largebins_size_range_32bit_big                                    [32mPASSED[0m
Running with coverage
test_smallbins_sizes_64bit                                             [32mPASSED[0m
Running with coverage
test_smallbins_sizes_32bit_big                                         [32mPASSED[0m
Running with coverage
test_try_free_invalid_overflow                                         [32mPASSED[0m
Running with coverage
test_try_free_invalid_misaligned                                       [32mPASSED[0m
Running with coverage
test_try_free_invalid_size_minsize                                     [32mPASSED[0m
Running with coverage
test_try_free_invalid_size_misaligned                                  [32mPASSED[0m
Running with coverage
test_try_free_double_free_tcache                                       [32mPASSED[0m
Running with coverage
test_try_free_invalid_next_size_fast                                   [32mPASSED[0m
Running with coverage
test_try_free_double_free                                              [32mPASSED[0m
Running with coverage
test_try_free_invalid_fastbin_entry                                    [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_top                            [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_out                            [32mPASSED[0m
Running with coverage
test_try_free_invalid_next_size_normal                                 [32mPASSED[0m
Running with coverage
test_try_free_double_free_or_corruption_prev                           [32mPASSED[0m
Running with coverage
test_try_free_corrupted_consolidate_backward                           [32mPASSED[0m
test_try_free_corrupted_unsorted_chunks                                [33mSKIPPED[0m
test_vis_heap_chunk_command                                            [32mPASSED[0m
test_command_nextproginstr                                             [32mPASSED[0m
Tests completed in 184 seconds

*********************************
********* TESTS SUMMARY *********
*********************************
Tests passed or skipped: 358
Tests failed: 1

Failing tests: tests/test_mmap.py::test_mmap_executes_properly
##[error]Process completed with exit code 1.


Changed files:
pwndbg/commands/got_tracking.py
pwndbg/commands/linkmap.py
pwndbg/gdblib/bpoint.py
pwndbg/gdblib/dynamic.py
pwndbg/gdblib/got.py
pwndbg/gdblib/shellcode.py

Fix diff:
diff --git a/pwndbg/commands/got_tracking.py b/pwndbg/commands/got_tracking.py
index 3d7ea441..f78e50b2 100644
--- a/pwndbg/commands/got_tracking.py
+++ b/pwndbg/commands/got_tracking.py
@@ -1,6 +1,7 @@
 from __future__ import annotations
 
 import argparse
+import re
 
 import pwndbg.color.message as message
 import pwndbg.gdblib.dynamic
@@ -9,72 +10,195 @@ import pwndbg.gdblib.proc
 from pwndbg.commands import CommandCategory
 
 parser = argparse.ArgumentParser(
-    description="Enables the GOT call tracking",
+    description="Toggles the GOT call tracking",
 )
 
 
 @pwndbg.commands.ArgparsedCommand(
-    parser, category=CommandCategory.LINUX, command_name="enable-got-tracking"
+    parser, category=CommandCategory.LINUX, command_name="toggle-got-tracking"
 )
 @pwndbg.commands.OnlyWhenRunning
-def enable_got_tracking():
-    pwndbg.gdblib.got.enable_got_call_tracking()
+def toggle_got_tracking():
+    if not pwndbg.gdblib.got.GOT_TRACKING:
+        pwndbg.gdblib.got.enable_got_call_tracking()
+    else:
+        pwndbg.gdblib.got.disable_got_call_tracking()
 
+def columns(rows, colors=None):
+    """
+    Print data formatted into distinct columns.
+    """
+    if len(rows) == 0:
+        # Nothing to print.
+        return
 
-@pwndbg.commands.ArgparsedCommand(
-    parser, category=CommandCategory.LINUX, command_name="disable-got-tracking"
-)
-@pwndbg.commands.OnlyWhenRunning
-def disable_got_tracking():
-    pwndbg.gdblib.got.disable_got_call_tracking()
+    col_max = [0 for _ in range(len(rows[0]))]
+    for i in range(len(rows)):
+        if len(rows[i]) == 0:
+            continue
+        for j in range(len(col_max)):
+            if len(rows[i][j]) > col_max[j]:
+                col_max[j] = len(rows[i][j])
 
+    for i in range(len(rows)):
+        if len(rows[i]) == 0:
+            print()
+            continue
 
-def try_decode(name):
-    """
-    Ideally, we'd like to display all of the names of the symbols as text, but
-    there is really nothing stopping symbol names from being stored in some
-    fairly wacky encoding or really from having names that aren't text at all.
+        for j in range(len(col_max)):
+            color = colors[j] if colors is not None else lambda x: x
+            print(f"{color(rows[i][j].ljust(col_max[j]))} ", end="")
+        print()
 
-    We should try our best to turn whatever the symbol name is into text, but
-    not so much that non-text entries or entries in unknown encodings become
-    unrecognizable.
-    """
-    try:
-        return name.decode("ascii")
-    except TypeError:
-        return name
 
+parser = argparse.ArgumentParser(
+    description="Displays an overview of the GOT tracking",
+)
+parser.add_argument(
+    "-s",
+    "--so-name",
+    type=str,
+    dest="soname",
+    default=".*",
+    help="Selects objects whose names matche the given expression",
+)
+parser.add_argument(
+    "-w",
+    "--writable",
+    dest="writable",
+    action="store_true",
+    help="Only show functions whose GOT entry is in a writable region of memory"
+)
+parser.add_argument(
+    "-f",
+    "--function-name",
+    type=str,
+    dest="fnname",
+    default=".*",
+    help="Selects functions whose names match the given expression"
+)
 
 @pwndbg.commands.ArgparsedCommand(
-    parser, category=CommandCategory.LINUX, command_name="got-call-status"
+    parser, category=CommandCategory.LINUX, command_name="got-report"
 )
 @pwndbg.commands.OnlyWhenRunning
-def got_call_status():
+def got_report(soname=".*", writable=False, fnname=".*"):
     if not pwndbg.gdblib.got.GOT_TRACKING:
         print(message.error("GOT call tracking is not enabled"))
         return
 
+    soname = re.compile(soname)
+    fnname = re.compile(fnname)
+
+    print(f"Showing {'writable' if writable else 'all'} GOT function entries and how many times they were called.")
+    print()
+
     per_object = {}
-    for _, (tracker, _) in pwndbg.gdblib.got.all_tracked_entries():
+    for _, (tracker, patcher) in pwndbg.gdblib.got.all_tracked_entries():
         objname = tracker.link_map_entry.name()
+        if objname == b"":
+            objname = pwndbg.gdblib.proc.exe
+        else:
+            objname = pwndbg.gdblib.got.display_name(objname)
+
+        # Filter out objects we're not interested in.
+        if soname.match(objname) is None:
+            continue
+
         if objname not in per_object:
             per_object[objname] = []
-        per_object[objname].append(tracker)
+        per_object[objname].append((tracker, patcher))
+
+    rows = [["Objfile", "Address in GOT", "Function Address", "Symbol", "Call Count"]]
 
     for objname, trackers in per_object.items():
-        if objname == b"":
-            objname = pwndbg.gdblib.proc.exe
-        else:
-            objanme = try_decode(objname)
+        for tracker, patcher in trackers:
+            # If requested, filter out entries that are not in a writable
+            # portion of memory.
+            if writable and not pwndbg.gdblib.vmmap.find(patcher.entry).write:
+                continue
 
-        print(f"GOT entry points for {objname}:")
-        for tracker in trackers:
-            dynamic = tracker.dynamic_segment
+            dynamic = tracker.dynamic_section
             sym_index = tracker.relocation_fn(tracker.relocation_index, "r_sym")
             sym_name = dynamic.symtab_read(sym_index, "st_name")
-            sym_name = try_decode(dynamic.string(sym_name))
+            sym_name = pwndbg.gdblib.got.display_name(dynamic.string(sym_name))
+
+            # Filter out symbols we're not interested in.
+            if fnname.match(sym_name) is None:
+                continue
 
             if sym_name == "":
                 sym_name = "<Empty>"
 
-            print(f"    {tracker.target:#x} - {sym_name} - {tracker.total_hits} hits")
+            hits = tracker.total_hits
+            hits = f"{hits} hit{'s' if hits != 1 else ''}"
+            rows.append([objname, f"{tracker.target:#x}", f"{patcher.entry:#x}", sym_name, hits])
+        rows.append([])
+
+    columns(rows)
+
+parser = argparse.ArgumentParser(
+    description="Displays the tracking status of a GOT entry.",
+)
+parser.add_argument(
+    "address",
+    type=str,
+    help="The address of the GOT entry being tracked",
+)
+
+@pwndbg.commands.ArgparsedCommand(
+    parser, category=CommandCategory.LINUX, command_name="got-tracking-status"
+)
+@pwndbg.commands.OnlyWhenRunning
+def got_tracking_status(address):
+    if not pwndbg.gdblib.got.GOT_TRACKING:
+        print(message.error("GOT call tracking is not enabled"))
+        return
+
+    try:
+        address = int(address, 0)
+    except ValueError as e:
+        print(message.error(f"Invalid address {address}: {e}"))
+        return
+
+    result = pwndbg.gdblib.got.tracked_entry_by_address(address)
+    if result is None:
+        print(message.error(f"No entry at address {address:#x}"))
+        return
+
+    tracker, patcher = result
+    rows = []
+
+    dynamic = tracker.dynamic_section
+    sym_index = tracker.relocation_fn(tracker.relocation_index, "r_sym")
+    raw_sym_name = dynamic.symtab_read(sym_index, "st_name")
+    sym_name = pwndbg.gdblib.got.display_name(dynamic.string(raw_sym_name))
+
+    if sym_name == "":
+        sym_name = "<Empty>"
+
+    objname = tracker.link_map_entry.name()
+    if objname == b"":
+        objname = pwndbg.gdblib.proc.exe
+    else:
+        objname = pwndbg.gdblib.got.display_name(objname)
+
+    print(f"Tracking details for {sym_name}")
+    print()
+    print(f"Dynamic object name: {objname}")
+    print(f"Jump target address: {tracker.target:#x}")
+    print(f"GOT entry address:   {address:#x}")
+    print(f"Relocation index:    {tracker.relocation_index}")
+    print(f"Symbol index:        {sym_index}")
+    print()
+
+    callers = sorted(tracker.hits.items(), key=lambda x: x[1])
+    for stack, hits in callers:
+        print(f"Called {hits} times from stack:")
+        for entry in stack:
+            print(f"    - {entry:#x} ", end="")
+            symname = pwndbg.gdblib.symbol.get(entry)
+            if symname != "":
+                print(f"<{symname}>", end="")
+            print()
+        print()
diff --git a/pwndbg/commands/linkmap.py b/pwndbg/commands/linkmap.py
index 3bd03f76..71edc43e 100644
--- a/pwndbg/commands/linkmap.py
+++ b/pwndbg/commands/linkmap.py
@@ -16,7 +16,7 @@ parser = argparse.ArgumentParser(
 @pwndbg.commands.OnlyWhenRunning
 def linkmap():
     is_first = True
-    rows = [["<NODE>", "<NAME>", "<LOAD BIAS>", "<DYNAMIC SEGMENT>"]]
+    rows = [["Node", "Objfile", "Load Bias", "Dynamic Segment"]]
     for obj in pwndbg.gdblib.dynamic.link_map():
         name = obj.name().decode("utf-8")
         if name == "":
diff --git a/pwndbg/gdblib/bpoint.py b/pwndbg/gdblib/bpoint.py
index 57a80208..fcd8d642 100644
--- a/pwndbg/gdblib/bpoint.py
+++ b/pwndbg/gdblib/bpoint.py
@@ -44,6 +44,7 @@ class BreakpointEvent(gdb.Breakpoint):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         REGISTERED_BP_EVENTS.add(id(self))
+        self.commands = f"python pwndbg.gdblib.bpoint.REGISTERED_BP_EVENTS[{id(self)}].on_breakpoint_hit()"
 
     def delete(self):
         REGISTERED_BP_EVENTS.remove(id(self))
@@ -55,27 +56,3 @@ class BreakpointEvent(gdb.Breakpoint):
         """
         pass
 
-
-# Attatch ourselves to the event runtime so that we can fire the
-# on_breakpoint_hit() function for all of the breakpoint events that stopped on
-# a given piece of code.
-def _handle_stop(event):
-    if type(event) is not gdb.BreakpointEvent:
-        # We have nothing to do here.
-        return
-
-    print("Handling BPStop")
-    should_continue = True
-    for bp in event.breakpoints:
-        if id(bp) not in REGISTERED_BP_EVENTS:
-            # This breakpoint does not belong to us. We also can't automatically
-            # resume execution after we finish processing our events, because
-            # someone else expects the code to stop here.
-            should_continue = False
-            continue
-        bp.on_breakpoint_hit()
-    if should_continue:
-        gdb.execute("continue")
-
-
-gdb.events.stop.connect(_handle_stop)
diff --git a/pwndbg/gdblib/dynamic.py b/pwndbg/gdblib/dynamic.py
index b5ff67be..8ce07cbd 100644
--- a/pwndbg/gdblib/dynamic.py
+++ b/pwndbg/gdblib/dynamic.py
@@ -77,16 +77,14 @@ class RDebugLinkMapChangedHook(pwndbg.gdblib.bpoint.BreakpointEvent):
     [1]: https://elixir.bootlin.com/glibc/glibc-2.37/source/elf/link.h#L52
     """
 
-    skip_this = True
+    skip_this = False
 
     def on_breakpoint_hit(self):
         # Skip every other trigger, we only care about the completed link map
         # that is available after the library is loaded.
+        self.skip_this = not self.skip_this
         if self.skip_this:
-            self.skip_this = False
             return
-        else:
-            self.skip_ths = True
 
         # Clear the cache that is tied to link map updates, and signal all of
         # the interested parties that this event has occurred.
diff --git a/pwndbg/gdblib/got.py b/pwndbg/gdblib/got.py
index 3f2dfd56..9c9b6abc 100644
--- a/pwndbg/gdblib/got.py
+++ b/pwndbg/gdblib/got.py
@@ -181,6 +181,28 @@ class TrapAllocator:
         while len(self.blocks) > 0:
             pwndbg.gdblib.shellcode
 
+def display_name(name, basename=False):
+    """
+    Return the display name for a symbol or objfile.
+
+    Ideally, we'd like to display all of the names of the symbols as text, but
+    there is really nothing stopping symbol names from being stored in some
+    fairly wacky encoding or really from having names that aren't text at all.
+
+    We should try our best to turn whatever the symbol name is into text, but
+    not so much that non-text entries or entries in unknown encodings become
+    unrecognizable.
+    """
+    if name == b"":
+        return "<Empty>"
+    try:
+        if isinstance(name, bytearray):
+            name = name.decode("ascii")
+        if basename and "/" in name:
+            name = name.split("/")[-1]
+        return name
+    except TypeError:
+        return name
 
 # The allocator we use for our trap addresses.
 TRAP_ALLOCATOR = TrapAllocator()
@@ -192,9 +214,12 @@ GOT_TRACKING = False
 INSTALLED_WATCHPOINTS = {}
 
 
-class Patcher(pwndbg.gdblib.bpoint.BreakpointEvent):
+class Patcher(pwndbg.gdblib.bpoint.Breakpoint):
     """
     Watches for changes made by program code to the GOT and fixes them up.
+
+    This class is paired with Tracker, and instances of both classes always
+    function together.
     """
 
     entry = 0
@@ -207,29 +232,57 @@ class Patcher(pwndbg.gdblib.bpoint.BreakpointEvent):
         self.silent = True
         self.entry = entry
         self.tracker = tracker
+        self.init = True
+
+        # Figure out the display names both this class and its corresponding
+        # tracker will use.
+        objfile = self.tracker.link_map_entry.name()
+        if objfile == b"":
+            objfile = pwndbg.gdblib.proc.exe
+        self.tracker.obj_display_name = display_name(objfile, basename=True) 
+
+        self.tracker.sym_display_name = display_name(
+            self.tracker.dynamic_section.string(
+                self.tracker.dynamic_section.symtab_read(
+                    self.tracker.relocation_fn(self.tracker.relocation_index, 'r_sym'), 
+                    'st_name'
+                )
+            )
+        )
 
-    def on_breakpoint_hit(self):
+    def should_stop(self):
         # Read the new branch target, and update the redirection target of the
         # tracker accordingly.
         new_target = pwndbg.gdblib.memory.pvoid(self.entry)
         if new_target == self.tracker.trapped_address:
-            return
+            # The write to this range from within GDB that we do at the end of
+            # this function can cause this watchpoint to trigger again.
+            # Obviously, we don't want to treat our own writes the same way we'd
+            # treat writes made by the inferior.
+            return False
 
         self.tracker.target = new_target
 
-        print(
-            f"Attempted write at entry {self.entry:#x} for symbol {self.tracker.dynamic_section.string(self.tracker.dynamic_section.symtab_read(self.tracker.relocation_fn(self.tracker.relocation_index, 'r_sym'), 'st_name'))}. {self.tracker.trapped_address:#x} -> {new_target:#x}"
-        )
+        # Notify the user about changes to the GOT.
+        if not self.init:
+            print(f"[*] GOT entry {self.entry:#x} ({self.tracker.sym_display_name}@{self.tracker.obj_display_name}) now points to {new_target:#x}")
+        self.init = False
+
         # Update the GOT entry so that it points to the trapped address again.
         #
         # FIXME: Ideally, we'd use gdb.Value([...]).assign() here, but that is
         # not always available, so we must do this ugly hack instead.
         gdb.execute(f"set *(void**){self.entry:#x} = {self.tracker.trapped_address:#x}")
 
+        return False
+
 
-class Tracker(pwndbg.gdblib.bpoint.BreakpointEvent):
+class Tracker(pwndbg.gdblib.bpoint.Breakpoint):
     """
     Class that tracks the accesses made to the entries in the GOT.
+
+    This class is paired with Patcher, and instances of both classes always
+    function together.
     """
 
     hits = {}
@@ -245,18 +298,19 @@ class Tracker(pwndbg.gdblib.bpoint.BreakpointEvent):
     def __init__(self):
         self.trapped_address = TRAP_ALLOCATOR.alloc()
         super().__init__(f"*{self.trapped_address:#x}", internal=True)
+        self.hits = {}
         self.silent = True
 
     def delete(self):
         TRAP_ALLOCATOR.free(self.trapped_address)
         super().delete()
 
-    def on_breakpoint_hit(self):
+    def should_stop(self):
+        # Notify the user about calls made through this GOT entry.
+        print(f"[*] {self.sym_display_name}@{self.obj_display_name} called via GOT")
+
         # Collect the stack that accessed this GOT entry.
-        print(
-            f"Hit trapped address {self.trapped_address:#x} of symbol {self.dynamic_section.string(self.dynamic_section.symtab_read(self.relocation_fn(self.relocation_index, 'r_sym'), 'st_name'))}, redirecting to {self.target:#x}"
-        )
-        stack = [pwndbg.gdblib.regs.pc]
+        stack = []
         frame = gdb.newest_frame().older()
         while frame is not None:
             stack.append(frame.pc())
@@ -269,7 +323,7 @@ class Tracker(pwndbg.gdblib.bpoint.BreakpointEvent):
 
         # Divert execution back to the real jump target.
         gdb.execute(f"set $pc = {self.target}")
-
+        return False
 
 def _update_watchpoints():
     """
@@ -308,10 +362,10 @@ def _update_watchpoints():
                 tracker = Tracker()
                 tracker.dynamic_section = dynamic
                 tracker.link_map_entry = obj
-                tracker.reloction_index = i
+                tracker.relocation_index = i
                 tracker.relocation_fn = dynamic.rel_read
                 patcher = Patcher(target, tracker)
-                patcher.on_breakpoint_hit()
+                patcher.should_stop()
 
                 INSTALLED_WATCHPOINTS[target] = (tracker, patcher)
         if dynamic.has_rela:
@@ -327,10 +381,10 @@ def _update_watchpoints():
                 tracker = Tracker()
                 tracker.dynamic_section = dynamic
                 tracker.link_map_entry = obj
-                tracker.reloction_index = i
+                tracker.relocation_index = i
                 tracker.relocation_fn = dynamic.rela_read
                 patcher = Patcher(target, tracker)
-                patcher.on_breakpoint_hit()
+                patcher.should_stop()
 
                 INSTALLED_WATCHPOINTS[target] = (tracker, patcher)
         if dynamic.has_jmprel:
@@ -344,10 +398,10 @@ def _update_watchpoints():
                 tracker = Tracker()
                 tracker.dynamic_section = dynamic
                 tracker.link_map_entry = obj
-                tracker.reloction_index = i
+                tracker.relocation_index = i
                 tracker.relocation_fn = dynamic.jmprel_read
                 patcher = Patcher(target, tracker)
-                patcher.on_breakpoint_hit()
+                patcher.should_stop()
 
                 INSTALLED_WATCHPOINTS[target] = (tracker, patcher)
 
@@ -363,14 +417,11 @@ def all_tracked_entries():
     return INSTALLED_WATCHPOINTS.items()
 
 
-def writable_tracked_entries():
+def tracked_entry_by_address(address):
     """
-    Return an iterator over all of the tracked GOT entries in writable sections.
+    Return the tracker associated with the entry at the given address, if any.
     """
-    for addr, item in all_tracked_entries():
-        if pwndbg.gdblib.vmmap.find(addr).write:
-            yield addr, item
-
+    return INSTALLED_WATCHPOINTS.get(address)
 
 def enable_got_call_tracking(disable_hardware_whatchpoints=True):
     """
@@ -408,6 +459,12 @@ def enable_got_call_tracking(disable_hardware_whatchpoints=True):
     pwndbg.gdblib.dynamic.r_debug_install_link_map_changed_hook()
     _update_watchpoints()
 
+    print("Enabled GOT tracking. Calls across dynamic library boundaries are now")
+    print("instumented, and the number of calls and stack traces for every call will be")
+    print("collected. You may check the current call information by using the")
+    print("`got-report` and `got-tracing-status` commands. Run this command ")
+    print("again to diasble tracking.")
+
 
 def disable_got_call_tracking():
     """
diff --git a/pwndbg/gdblib/shellcode.py b/pwndbg/gdblib/shellcode.py
index 221d7289..994f4ddb 100644
--- a/pwndbg/gdblib/shellcode.py
+++ b/pwndbg/gdblib/shellcode.py
@@ -89,6 +89,7 @@ def exec_shellcode(blob, restore_context=True, capture=None):
 
     # Execute.
     bp = gdb.Breakpoint(f"*{starting_address+len(blob):#x}", internal=True, temporary=True)
+    bp.silent = True
     gdb.execute("continue")
 
     # Give the caller a chance to collect information from the environment