【发布时间】:2015-11-02 17:08:00
【问题描述】:
当我使用 python 的 struct.pack 方法时,我得到了一个奇怪的结果。 代码如下所示:
>>> struct.pack('<i', 0x01d1f23a)
我想要得到的结果是将十六进制地址转换为小端(“
#!/usr/bin/perl
my $eip = pack('V',0x01ccf23a);
print "$eip[0]";
print "$eip[1]";
print "$eip[2]";
print "$eip[3]";
结果是:582422041
我需要用 python 达到同样的结果。
【问题讨论】:
-
那么你期望的结果是什么,而你得到了什么?
-
你能解释一下为什么冒号有问题吗?你用输出字符串做什么?您想要一个长度为 4 的字符串,其中包含四个字符
chr(0x3a)、chr(0xf2)、chr(0xd1)和chr(0x01),还是想要一个长度为 16 的字符串,在打印时看起来像\x3a\xf2\xd1\x01? (如果是后者,为什么?)还是别的什么? -
嘿,马克我刚刚编辑了我的问题。我希望结果是这样的:582422041
-
@Igalname:好吧,这对我来说毫无意义(你为什么要把所有的数字都这样计算?),但如果这真的是你想要的,那么
''.join(str(x) for x in struct.pack('<i', 0x01ccf23a))(在 Python 3 中) ) 或''.join(str(ord(x)) for x in struct.pack('<i', 0x01ccf23a))(在 Python 2 中) 可以解决问题。 -
@Igalname:你试过打印吗?如果你这样做了,你会注意到它仍然以
':'开头(实际上它与struct.pack('<i', 0x01D1F23A)相同)。
标签: python shellcode endianness