@@ -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 ):
336
336
337
337
name = "%s%s" % (op ,size )
338
338
mod = sys .modules [__name__ ]
@@ -342,15 +342,15 @@ 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
345
+ endian = endianness or context .endian
346
346
signed = context .signed
347
347
return {("little" , True ): ls ,
348
348
("little" , False ): lu ,
349
349
("big" , True ): bs ,
350
350
("big" , False ): bu }[endian , signed ](number , 3 )
351
351
352
352
@LocalNoarchContext
353
- def p8 (number , endianness = None , sign = None , ** kwargs ):
353
+ def p8 (number , endianness = None , ** kwargs ):
354
354
"""p8(number, endianness, sign, ...) -> bytes
355
355
356
356
Packs an 8-bit integer
@@ -365,10 +365,10 @@ 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 )
369
369
370
370
@LocalNoarchContext
371
- def p16 (number , endianness = None , sign = None , ** kwargs ):
371
+ def p16 (number , endianness = None , ** kwargs ):
372
372
"""p16(number, endianness, sign, ...) -> bytes
373
373
374
374
Packs an 16-bit integer
@@ -382,11 +382,18 @@ 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 )
387
394
388
395
@LocalNoarchContext
389
- def p32 (number , endianness = None , sign = None , ** kwargs ):
396
+ def p32 (number , endianness = None , ** kwargs ):
390
397
"""p32(number, endianness, sign, ...) -> bytes
391
398
392
399
Packs an 32-bit integer
@@ -400,11 +407,18 @@ 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 )
405
419
406
420
@LocalNoarchContext
407
- def p64 (number , endianness = None , sign = None , ** kwargs ):
421
+ def p64 (number , endianness = None , ** kwargs ):
408
422
"""p64(number, endianness, sign, ...) -> bytes
409
423
410
424
Packs an 64-bit integer
@@ -418,11 +432,18 @@ 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 )
423
444
424
445
@LocalNoarchContext
425
- def u8 (data , endianness = None , sign = None , ** kwargs ):
446
+ def u8 (data , endianness = None , ** kwargs ):
426
447
"""u8(data, endianness, sign, ...) -> int
427
448
428
449
Unpacks an 8-bit integer
@@ -437,10 +458,10 @@ 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 )
441
462
442
463
@LocalNoarchContext
443
- def u16 (data , endianness = None , sign = None , ** kwargs ):
464
+ def u16 (data , endianness = None , ** kwargs ):
444
465
"""u16(data, endianness, sign, ...) -> int
445
466
446
467
Unpacks an 16-bit integer
@@ -455,10 +476,10 @@ 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 )
459
480
460
481
@LocalNoarchContext
461
- def u32 (data , endianness = None , sign = None , ** kwargs ):
482
+ def u32 (data , endianness = None , ** kwargs ):
462
483
"""u32(data, endianness, sign, ...) -> int
463
484
464
485
Unpacks an 32-bit integer
@@ -473,10 +494,10 @@ 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 )
477
498
478
499
@LocalNoarchContext
479
- def u64 (data , endianness = None , sign = None , ** kwargs ):
500
+ def u64 (data , endianness = None , ** kwargs ):
480
501
"""u64(data, endianness, sign, ...) -> int
481
502
482
503
Unpacks an 64-bit integer
@@ -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 )
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