user277465
user277465

Reputation:

Python string in pure hex form

>>> x = "\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
>>> x
'U\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x081\xdb1\xd2\x8a\x1c\x08\x01\xdaA\x83\xf9ru\xf5\x81\xfaqq\x00\x00t"\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9z\xa0\x04\x08\xba\n\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9p\xa0\x04\x08\xba\t\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80]\xc3'

Is there any way I can get the interpreter to print out x, exactly as I had input it? i.e. It should start with a \x55 and not a U.

Upvotes: 2

Views: 568

Answers (2)

Mark Tolonen
Mark Tolonen

Reputation: 177406

To get exactly what you want with the original value of x, write a display function:

>>> x = "\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
>>> x
'U\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x081\xdb1\xd2\x8a\x1c\x08\x01\xdaA\x83\xf9ru\xf5\x81\xfaqq\x00\x00t"\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9z\xa0\x04\x08\xba\n\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9p\xa0\x04\x08\xba\t\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80]\xc3'
>>> def display(x):
...     return "'\\x"+'\\x'.join(format(ord(n),'02x') for n in x)+"'"
... 
>>> print display(x)
'\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3'

If you just want a hex dump, here is a standard library function with a slightly different format:

>>> import binascii
>>> binascii.hexlify(x)
'5589e5b900000000b8c0a0040831db31d28a1c0801da4183f97275f581fa717100007422b804000000bb01000000b97aa00408ba0a000000cd80b801000000bb00000000cd80b804000000bb01000000b970a00408ba09000000cd80b801000000bb00000000cd805dc3'

Upvotes: 1

Nir Alfasi
Nir Alfasi

Reputation: 53525

Yes, add r before the quotes:

x = r"\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
print x

output

\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3

Upvotes: 3

Related Questions