@@ -332,7 +332,7 @@ def routine(data, stacklevel=None):
332
332
#
333
333
# Make normal user-oriented packers, e.g. p8
334
334
#
335
- def _do_packing (op , size , number ):
335
+ def _do_packing (op , size , number , endianness = None , sign = None ):
336
336
337
337
name = "%s%s" % (op ,size )
338
338
mod = sys .modules [__name__ ]
@@ -342,8 +342,8 @@ def _do_packing(op, size, number):
342
342
bs = getattr (mod , "_%sbs" % (name ))
343
343
bu = getattr (mod , "_%sbu" % (name ))
344
344
345
- endian = context .endian
346
- signed = context .signed
345
+ endian = endianness or context .endian
346
+ signed = sign or context .signed
347
347
return {("little" , True ): ls ,
348
348
("little" , False ): lu ,
349
349
("big" , True ): bs ,
@@ -365,7 +365,7 @@ def p8(number, endianness = None, sign = None, **kwargs):
365
365
Returns:
366
366
The packed number as a byte string
367
367
"""
368
- return _do_packing ('p' , 8 , number )
368
+ return _do_packing ('p' , 8 , number , endianness , sign )
369
369
370
370
@LocalNoarchContext
371
371
def p16 (number , endianness = None , sign = None , ** kwargs ):
@@ -382,8 +382,15 @@ def p16(number, endianness = None, sign = None, **kwargs):
382
382
383
383
Returns:
384
384
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'
385
392
"""
386
- return _do_packing ('p' , 16 , number )
393
+ return _do_packing ('p' , 16 , number , endianness , sign )
387
394
388
395
@LocalNoarchContext
389
396
def p32 (number , endianness = None , sign = None , ** kwargs ):
@@ -400,8 +407,15 @@ def p32(number, endianness = None, sign = None, **kwargs):
400
407
401
408
Returns:
402
409
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'
403
417
"""
404
- return _do_packing ('p' , 32 , number )
418
+ return _do_packing ('p' , 32 , number , endianness , sign )
405
419
406
420
@LocalNoarchContext
407
421
def p64 (number , endianness = None , sign = None , ** kwargs ):
@@ -418,8 +432,15 @@ def p64(number, endianness = None, sign = None, **kwargs):
418
432
419
433
Returns:
420
434
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'
421
442
"""
422
- return _do_packing ('p' , 64 , number )
443
+ return _do_packing ('p' , 64 , number , endianness , sign )
423
444
424
445
@LocalNoarchContext
425
446
def u8 (data , endianness = None , sign = None , ** kwargs ):
@@ -437,7 +458,7 @@ def u8(data, endianness = None, sign = None, **kwargs):
437
458
Returns:
438
459
The unpacked number
439
460
"""
440
- return _do_packing ('u' , 8 , data )
461
+ return _do_packing ('u' , 8 , data , endianness , sign )
441
462
442
463
@LocalNoarchContext
443
464
def u16 (data , endianness = None , sign = None , ** kwargs ):
@@ -455,7 +476,7 @@ def u16(data, endianness = None, sign = None, **kwargs):
455
476
Returns:
456
477
The unpacked number
457
478
"""
458
- return _do_packing ('u' , 16 , data )
479
+ return _do_packing ('u' , 16 , data , endianness , sign )
459
480
460
481
@LocalNoarchContext
461
482
def u32 (data , endianness = None , sign = None , ** kwargs ):
@@ -473,7 +494,7 @@ def u32(data, endianness = None, sign = None, **kwargs):
473
494
Returns:
474
495
The unpacked number
475
496
"""
476
- return _do_packing ('u' , 32 , data )
497
+ return _do_packing ('u' , 32 , data , endianness , sign )
477
498
478
499
@LocalNoarchContext
479
500
def u64 (data , endianness = None , sign = None , ** kwargs ):
@@ -491,7 +512,7 @@ def u64(data, endianness = None, sign = None, **kwargs):
491
512
Returns:
492
513
The unpacked number
493
514
"""
494
- return _do_packing ('u' , 64 , data )
515
+ return _do_packing ('u' , 64 , data , endianness , sign )
495
516
496
517
def make_packer (word_size = None , sign = None , ** kwargs ):
497
518
"""make_packer(word_size = None, endianness = None, sign = None) -> number → str
@@ -775,7 +796,7 @@ def flat(*args, **kwargs):
775
796
Examples:
776
797
777
798
(Test setup, please ignore)
778
-
799
+
779
800
>>> context.clear()
780
801
781
802
Basic usage of :meth:`flat` works similar to the pack() routines.
@@ -822,7 +843,7 @@ def flat(*args, **kwargs):
822
843
823
844
Dictionary usage permits directly using values derived from :func:`.cyclic`.
824
845
See :func:`.cyclic`, :function:`pwnlib.context.context.cyclic_alphabet`, and :data:`.context.cyclic_size`
825
- for more options.
846
+ for more options.
826
847
827
848
The cyclic pattern can be provided as either the text or hexadecimal offset.
828
849
@@ -873,7 +894,7 @@ def flat(*args, **kwargs):
873
894
874
895
Negative indices are also supported, though this only works for integer
875
896
keys.
876
-
897
+
877
898
>>> flat({-4: b'x', -1: b'A', 0: b'0', 4: b'y'})
878
899
b'xaaA0aaay'
879
900
"""
0 commit comments