gpt4 book ai didi

Python帮助理解示例代码

转载 作者:太空狗 更新时间:2023-10-30 01:45:04 24 4
gpt4 key购买 nike

我最近一直在尝试学习 python,遇到了一些我很难理解它是如何工作的东西。主要是列表的设计。

有问题的列表来自这篇关于简单模糊测试工具的安全文章:http://blog.securestate.com/post/2009/10/06/How-a-simple-python-fuzzer-brought-down-SMBv2-in-2-seconds.aspx

有问题的实际列表是:

#Negotiate Protocol Request
packet = [chr(int(a, 16)) for a in """
00 00 00 90
ff 53 4d 42 72 00 00 00 00 18 53 c8 00 00 00 00
00 00 00 00 00 00 00 00 ff ff ff fe 00 00 00 00
00 6d 00 02 50 43 20 4e 45 54 57 4f 52 4b 20 50
52 4f 47 52 41 4d 20 31 2e 30 00 02 4c 41 4e 4d
41 4e 31 2e 30 00 02 57 69 6e 64 6f 77 73 20 66
6f 72 20 57 6f 72 6b 67 72 6f 75 70 73 20 33 2e
31 61 00 02 4c 4d 31 2e 32 58 30 30 32 00 02 4c
41 4e 4d 41 4e 32 2e 31 00 02 4e 54 20 4c 4d 20
30 2e 31 32 00 02 53 4d 42 20 32 2e 30 30 32 00
""".split()]

他使用以下行从中提取一个字节(我想?):

what = packet[:]
where = choice(range(len(packet)))
which = chr(choice(range(256)))
what[where] = which

我从未见过以这种方式设计的列表,而且似乎无法理解它是如何选择的。最让我困惑的是 packet = [chr(int(a, 16)) for a in """,他把所有这些东西都放在了一个看起来像是评论 block 的地方。 . 然后执行 .split(). 0_o

我知道这是一个模糊的问题,但如果有人能向我解释这个问题或指出一些说明这种列表构建风格的文档的方向,我会非常高兴。这看起来是一种非常有效的存储/提取大量字节的方法。

最佳答案

这个

"""
00 00 00 90
ff 53 4d 42 72 00 00 00 00 18 53 c8 00 00 00 00
00 00 00 00 00 00 00 00 ff ff ff fe 00 00 00 00
00 6d 00 02 50 43 20 4e 45 54 57 4f 52 4b 20 50
52 4f 47 52 41 4d 20 31 2e 30 00 02 4c 41 4e 4d
41 4e 31 2e 30 00 02 57 69 6e 64 6f 77 73 20 66
6f 72 20 57 6f 72 6b 67 72 6f 75 70 73 20 33 2e
31 61 00 02 4c 4d 31 2e 32 58 30 30 32 00 02 4c
41 4e 4d 41 4e 32 2e 31 00 02 4e 54 20 4c 4d 20
30 2e 31 32 00 02 53 4d 42 20 32 2e 30 30 32 00
"""

只是multiline string .

"""
00 00 00 90
ff 53 4d 42 72 00 00 00 00 18 53 c8 00 00 00 00
""".split()

produces split带有上述字符串的空格:

['00', '00', '00', '90', 'ff', '53', '4d', '42', '72', '00', '00', '00', '00', '18', '53', 'c8', '00', '00', '00', '00']

还有这个:

[chr(int(a, 16)) for a in ['00', '00', '00', '90', 'ff', '53', '4d', '42', '72', '00', '00', '00', '00', '18', '53', 'c8', '00', '00', '00', '00']]

是一个list comprehension它遍历形成的列表并将应用 chr(int(a,16)) 的所有值转换为每个 a

int(a,16)将包含十六进制字符串表示的字符串转换为 int

chr将此整数转换为 char。

结果是:

>>> [chr(int(a, 16)) for a in ['00', '00', '00', '90', 'ff', '53', '4d', '42', '72', '00', '00', '00', '00', '18', '53', 'c8', '00', '00', '00', '00']]
['\x00', '\x00', '\x00', '\x90', '\xff', 'S', 'M', 'B', 'r', '\x00', '\x00', '\x00', '\x00', '\x18', 'S', '\xc8', '\x00', '\x00', '\x00', '\x00']

关于Python帮助理解示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com