目次
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件のコメント