diff --git a/docs/source/tubes/processes.rst b/docs/source/tubes/processes.rst index c4d891b35..a14377c0b 100644 --- a/docs/source/tubes/processes.rst +++ b/docs/source/tubes/processes.rst @@ -2,10 +2,6 @@ from pwn import * - # TODO: Remove global POSIX flag - import doctest - doctest_additional_flags = doctest.OPTIONFLAGS_BY_NAME['POSIX'] - :mod:`pwnlib.tubes.process` --- Processes =========================================================== diff --git a/docs/source/tubes/serial.rst b/docs/source/tubes/serial.rst index 599ca35c4..d850a0483 100644 --- a/docs/source/tubes/serial.rst +++ b/docs/source/tubes/serial.rst @@ -2,10 +2,6 @@ from pwn import * - # TODO: Remove global POSIX flag - import doctest - doctest_additional_flags = doctest.OPTIONFLAGS_BY_NAME['POSIX'] - :mod:`pwnlib.tubes.serialtube` --- Serial Ports =========================================================== diff --git a/pwnlib/tubes/process.py b/pwnlib/tubes/process.py index 6e36b61be..ba2bd2aa5 100644 --- a/pwnlib/tubes/process.py +++ b/pwnlib/tubes/process.py @@ -135,19 +135,22 @@ class process(tube): True >>> p.connected('send') False - >>> p.recvline() - b'Hello world\n' + >>> p.recvline() # doctest: +ELLIPSIS + b'Hello world...\n' >>> p.recvuntil(b',') b'Wow,' >>> p.recvregex(b'.*data') b' such data' - >>> p.recv() - b'\n' + >>> p.recv() # doctest: +ELLIPSIS + b'...\n' >>> p.recv() # doctest: +ELLIPSIS Traceback (most recent call last): ... EOFError + .. doctest:: + :options: +POSIX + >>> p = process('cat') >>> d = open('/dev/urandom', 'rb').read(4096) >>> p.recv(timeout=0.1) @@ -515,6 +518,9 @@ def program(self): Example: + .. doctest:: + :options: +POSIX +TODO + >>> p = process('/bin/true') >>> p.executable == '/bin/true' True @@ -530,6 +536,9 @@ def cwd(self): Example: + .. doctest:: + :options: +POSIX +TODO + >>> p = process('sh') >>> p.sendline(b'cd /tmp; echo AAA') >>> _ = p.recvuntil(b'AAA') @@ -902,7 +911,10 @@ def maps(self): read, write, execute, private, shared, string Example: - + + .. doctest:: + :options: +POSIX +TODO + >>> p = process(['cat']) >>> p.sendline(b"meow") >>> p.recvline() @@ -982,7 +994,10 @@ def get_mapping(self, path_value, single=True): path_value. Example: - + + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> mapping = p.get_mapping('[stack]') >>> mapping.path == '[stack]' @@ -1025,6 +1040,9 @@ def stack_mapping(self, single=True): Example: + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> mapping = p.stack_mapping() >>> mapping.path @@ -1054,6 +1072,9 @@ def heap_mapping(self, single=True): Example: + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> p.sendline(b'meow') >>> p.recvline() @@ -1086,6 +1107,9 @@ def vdso_mapping(self, single=True): Example: + .. doctest:: + :options: +LINUX + >>> p = process(['cat']) >>> mapping = p.vdso_mapping() >>> mapping.path @@ -1115,6 +1139,9 @@ def vvar_mapping(self, single=True): Example: + .. doctest:: + :options: +LINUX + >>> p = process(['cat']) >>> mapping = p.vvar_mapping() >>> mapping.path @@ -1145,6 +1172,9 @@ def libc_mapping(self, single=True): Example: + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> p.sendline(b'meow') >>> p.recvline() @@ -1225,6 +1255,9 @@ def elf_mapping(self, single=True): Example: + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> p.sendline(b'meow') >>> p.recvline() @@ -1263,7 +1296,9 @@ def lib_size(self, path_value): Example: - >>> from pwn import * + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> p.send(b'meow') >>> p.recvuntil(b'meow') @@ -1303,6 +1338,9 @@ def address_mapping(self, address): Example: + .. doctest:: + :options: +POSIX + >>> p = process(['cat']) >>> p.sendline(b'meow') >>> p.recvline() @@ -1363,16 +1401,19 @@ def libc(self): Example: - >>> p = process("/bin/cat") - >>> p.send(b"meow") - >>> p.recvuntil(b"meow") - b'meow' - >>> libc = p.libc - >>> libc is not None - True - >>> libc # doctest: +SKIP - ELF('/lib64/libc-...so') - >>> p.close() + .. doctest:: + :options: +POSIX + + >>> p = process("/bin/cat") + >>> p.send(b"meow") + >>> p.recvuntil(b"meow") + b'meow' + >>> libc = p.libc + >>> libc is not None + True + >>> libc # doctest: +SKIP + ELF('/lib64/libc-...so') + >>> p.close() """ from pwnlib.elf import ELF @@ -1447,6 +1488,9 @@ def leak(self, address, count=1): Example: + .. doctest:: + :options: +POSIX +TODO + >>> e = ELF(which('bash-static')) >>> p = process(e.path) @@ -1483,6 +1527,9 @@ def writemem(self, address, data): Let's write data to the beginning of the mapped memory of the ELF. + .. doctest:: + :options: +POSIX +TODO + >>> context.clear(arch='i386') >>> address = 0x100000 >>> data = cyclic(32) diff --git a/pwnlib/util/misc.py b/pwnlib/util/misc.py index 0b99a599b..04265f950 100644 --- a/pwnlib/util/misc.py +++ b/pwnlib/util/misc.py @@ -163,8 +163,10 @@ def which(name, all = False, path=None): Example: - >>> which('sh') # doctest: +ELLIPSIS +POSIX +TODO + >>> which('sh') # doctest: +ELLIPSIS +POSIX '.../bin/sh' + >>> which('cmd') # doctest: +ELLIPSIS +WINDOWS + '...\\cmd.EXE' """ # If name is a path, do not attempt to resolve it. if os.path.sep in name: