Skip to content

Commit 534c270

Browse files
committed
packing: Do use extra arguments in p* and u*
1 parent 29fb02f commit 534c270

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

pwnlib/util/packing.py

+35-14
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ def routine(data, stacklevel=None):
332332
#
333333
# Make normal user-oriented packers, e.g. p8
334334
#
335-
def _do_packing(op, size, number):
335+
def _do_packing(op, size, number, endianness=None, sign=None):
336336

337337
name = "%s%s" % (op,size)
338338
mod = sys.modules[__name__]
@@ -342,8 +342,8 @@ def _do_packing(op, size, number):
342342
bs = getattr(mod, "_%sbs" % (name))
343343
bu = getattr(mod, "_%sbu" % (name))
344344

345-
endian = context.endian
346-
signed = context.signed
345+
endian = endianness or context.endian
346+
signed = sign or context.signed
347347
return {("little", True ): ls,
348348
("little", False): lu,
349349
("big", True ): bs,
@@ -365,7 +365,7 @@ def p8(number, endianness = None, sign = None, **kwargs):
365365
Returns:
366366
The packed number as a byte string
367367
"""
368-
return _do_packing('p', 8, number)
368+
return _do_packing('p', 8, number, endianness, sign)
369369

370370
@LocalNoarchContext
371371
def p16(number, endianness = None, sign = None, **kwargs):
@@ -382,8 +382,15 @@ def p16(number, endianness = None, sign = None, **kwargs):
382382
383383
Returns:
384384
The packed number as a byte string
385+
386+
Examples:
387+
388+
>>> p16(0x4142, 'big')
389+
b'AB'
390+
>>> p16(0x4142, endianness='big')
391+
b'AB'
385392
"""
386-
return _do_packing('p', 16, number)
393+
return _do_packing('p', 16, number, endianness, sign)
387394

388395
@LocalNoarchContext
389396
def p32(number, endianness = None, sign = None, **kwargs):
@@ -400,8 +407,15 @@ def p32(number, endianness = None, sign = None, **kwargs):
400407
401408
Returns:
402409
The packed number as a byte string
410+
411+
Examples:
412+
413+
>>> p32(0x41424344, 'big')
414+
b'ABCD'
415+
>>> p32(0x41424344, endianness='big')
416+
b'ABCD'
403417
"""
404-
return _do_packing('p', 32, number)
418+
return _do_packing('p', 32, number, endianness, sign)
405419

406420
@LocalNoarchContext
407421
def p64(number, endianness = None, sign = None, **kwargs):
@@ -418,8 +432,15 @@ def p64(number, endianness = None, sign = None, **kwargs):
418432
419433
Returns:
420434
The packed number as a byte string
435+
436+
Examples:
437+
438+
>>> p64(0x4142434445464748, 'big')
439+
b'ABCDEFGH'
440+
>>> p64(0x4142434445464748, endianness='big')
441+
b'ABCDEFGH'
421442
"""
422-
return _do_packing('p', 64, number)
443+
return _do_packing('p', 64, number, endianness, sign)
423444

424445
@LocalNoarchContext
425446
def u8(data, endianness = None, sign = None, **kwargs):
@@ -437,7 +458,7 @@ def u8(data, endianness = None, sign = None, **kwargs):
437458
Returns:
438459
The unpacked number
439460
"""
440-
return _do_packing('u', 8, data)
461+
return _do_packing('u', 8, data, endianness, sign)
441462

442463
@LocalNoarchContext
443464
def u16(data, endianness = None, sign = None, **kwargs):
@@ -455,7 +476,7 @@ def u16(data, endianness = None, sign = None, **kwargs):
455476
Returns:
456477
The unpacked number
457478
"""
458-
return _do_packing('u', 16, data)
479+
return _do_packing('u', 16, data, endianness, sign)
459480

460481
@LocalNoarchContext
461482
def u32(data, endianness = None, sign = None, **kwargs):
@@ -473,7 +494,7 @@ def u32(data, endianness = None, sign = None, **kwargs):
473494
Returns:
474495
The unpacked number
475496
"""
476-
return _do_packing('u', 32, data)
497+
return _do_packing('u', 32, data, endianness, sign)
477498

478499
@LocalNoarchContext
479500
def u64(data, endianness = None, sign = None, **kwargs):
@@ -491,7 +512,7 @@ def u64(data, endianness = None, sign = None, **kwargs):
491512
Returns:
492513
The unpacked number
493514
"""
494-
return _do_packing('u', 64, data)
515+
return _do_packing('u', 64, data, endianness, sign)
495516

496517
def make_packer(word_size = None, sign = None, **kwargs):
497518
"""make_packer(word_size = None, endianness = None, sign = None) -> number → str
@@ -775,7 +796,7 @@ def flat(*args, **kwargs):
775796
Examples:
776797
777798
(Test setup, please ignore)
778-
799+
779800
>>> context.clear()
780801
781802
Basic usage of :meth:`flat` works similar to the pack() routines.
@@ -822,7 +843,7 @@ def flat(*args, **kwargs):
822843
823844
Dictionary usage permits directly using values derived from :func:`.cyclic`.
824845
See :func:`.cyclic`, :function:`pwnlib.context.context.cyclic_alphabet`, and :data:`.context.cyclic_size`
825-
for more options.
846+
for more options.
826847
827848
The cyclic pattern can be provided as either the text or hexadecimal offset.
828849
@@ -873,7 +894,7 @@ def flat(*args, **kwargs):
873894
874895
Negative indices are also supported, though this only works for integer
875896
keys.
876-
897+
877898
>>> flat({-4: b'x', -1: b'A', 0: b'0', 4: b'y'})
878899
b'xaaA0aaay'
879900
"""

0 commit comments

Comments
 (0)