pack/unpack系でのメソッドで使用される引数の意味

  • number (int)
    パックする値
  • word_size (int)
    変換するワードサイズ
    'all'を指定すると、変換後の文字列長の長さになる。
  • endianness (str)
    エンディアン
    'big' or 'little'
  • sign
    符号
    'signed' or 'unsigned'
    or
    True or False
  • kwargs
    よくわからん。多分使わない。

pack系

数値をbytes型に変換する

pack(number, word_size=None, endian=None, sign=None, **kwargs)

>>> pack(0xdeadbeef, word_size='64', endian='little')
b'\xef\xbe\xad\xde\x00\x00\x00\x00'

>>> pack(0xdeadbeef, word_size='64', endian='big')
b'\x00\x00\x00\x00\xde\xad\xbe\xef'

>>> pack(0xdeadbeef, word_size='all', endian='little')
b'\xef\xbe\xad\xde'

また、pack関数の word_size を指定してある以下の関数が存在する。
p の次の数値が word_size になる。

  • p8()
  • p16()
  • p32()
  • p64()
>>> p32(0xdeadbeef)
b'\xef\xbe\xad\xde'
>>> p64(0xdeadbeef)
b'\xef\xbe\xad\xde\x00\x00\x00\x00'

unpack系

bytes型を数値に変換する

unpack(data, word_size=None, endian=None, sign=None)

>>> hex(unpack(b'/bin/sh\x00', word_size=64))
'0x68732f6e69622f'

また、unpack関数の word_size を指定してある以下の関数が存在する。
p u次の数値が word_size になる。

  • u8()
  • u16()
  • u32()
  • u64()
>>> hex(u64(b'/bin/sh\x00'))
'0x68732f6e69622f'

unpack_many(data, word_size=None, endian=None, sign=None)

bytes型を word_size に分割して数値に変換する。

>>> list(map(hex, unpack_many(b'\xbe\xba\xfe\xca\xef\xbe\xad\xde', 32)))
['0xcafebabe', '0xdeadbeef']

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です