• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Gallopsled / pwntools / 11306887291

12 Oct 2024 03:48PM UTC coverage: 74.245% (-0.09%) from 74.334%
11306887291

push

github

web-flow
Test Python version >= 3.10 in CI and fix tests on Python 3.12 (#2486)

* Bump tested python version to >= 3.10

Some workflows were using 3.8 still. Start testing on 3.12 too.

* Fix installing rpyc in CI on ubuntu 24.04

`ubuntu-latest` now points to 24.04 which requires the --break-system-packages dance.

* Test Python 2 on Ubuntu 22.04

Ubuntu 24.04 dropped the python2.7 packages.

* Test on android-34

* Fix ARM binutils disassembly output test expectation

It used to print "; 0x4" but changed to "@ 0x4" in some version.

* Skip QEMU LD_PREFIX path test

Ubuntu 24.04 seemed to have switched the qemu-user --help output to show `/usr/gnemul/qemu-$ARCH` instead of `/etc/qemu-binfmt`. Ignore the actual path in the test.

* Fix x86 ascii shellcode encoder test

The alphabet was using `\` escape sequences badly.

<stdin>:1: SyntaxWarning: invalid escape sequence '\]'

* Fix mips xor encoder unaligned memory access

qemu throws a SIGBUS error when the shellcode tries to access unaligned memory since some version. Align the "stack" properly.

* Fix util.lists.partition test output on Python 3.12

The __repr__ output of OrderedDict was changed to look like ordinary {} dicts.

* Fix safeeval test on Python 3.12

There is a 151 RESUME opcode in Python 3.12 now.

* Fix registering commandline subparsers multiple times for Python 3.11

Python 3.11 added a sanity check to argparse to prevent registering the same subparser multiple times.

argparse.ArgumentError: argument command: conflicting subparser: cyclic

Avoid importing the command twice.
`python -m pwnlib.commandline.cyclic` failed on Python 3.11 triggered in CI when running the commandline tools while collecting coverage.

* Fix pip cache in CI

3678 of 6140 branches covered (59.9%)

20 of 34 new or added lines in 22 files covered. (58.82%)

36 existing lines in 4 files now uncovered.

12972 of 17472 relevant lines covered (74.24%)

0.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

59.09
/pwnlib/commandline/elfpatch.py
1
from __future__ import absolute_import
1✔
2
from __future__ import division
1✔
3

4
import sys
1✔
5

6
import pwnlib.args
1✔
7
pwnlib.args.free_form = False
1✔
8

9
from pwn import *
1✔
10
from pwnlib.commandline import common
1✔
11

12
p = common.parser_commands.add_parser(
1✔
13
    'elfpatch',
14
    help = 'Patch an ELF file',
15
    description = 'Patch an ELF file'
16
)
17

18
p.add_argument('elf',help="File to patch")
1✔
19
p.add_argument('offset',help="Offset to patch in virtual address (hex encoded)")
1✔
20
p.add_argument('bytes',help='Bytes to patch (hex encoded)')
1✔
21

22

23
def main(a):
1✔
24
    if not a.offset.startswith('0x'):
×
25
        a.offset = '0x' + a.offset
×
26

27
    offset = int(a.offset, 16)
×
28
    bytes  = unhex(a.bytes)
×
29

30
    with context.silent:
×
31
        elf    = ELF(a.elf)
×
32

33
    elf.write(offset, bytes)
×
34
    getattr(sys.stdout, 'buffer', sys.stdout).write(elf.get_data())
×
35

36
if __name__ == '__main__':
1!
NEW
37
    pwnlib.commandline.common.main(__file__, main)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc