Python:检测数据危害的脚本

2024-06-08 14:03:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学校的一个项目中写一个程序来检测汇编指令中的读写数据相关性。我有一份包含说明的清单。在

一个这样的例子是
第1行=[[ld a8,0x8910][mul a3,a2,8][shl a3,a3,4][add a3,a3,a8]]

这里最后一条add指令取决于左移(shift left,shl)的结果,而shl又取决于mul intsruction的结果。在

我希望我的代码将依赖项输出为{mul->;sh->;add}

另一个例子:line2=[[添加a3,a2,a1][sub a4,a5,a6][add a9,a2,a4]] 输出:{add->;add}{sub->;add}

我想删除指令操作码以获得第1行=[[a80x8910][a3a2,8][a3a3,4][a3a3,a8]] 然后将目标操作数提取到dst\u list=[a8,a3,a3,a3}中,并将源操作数提取到另一个列表中,如src_list=[0x8910,[a2,8],[a3,a8]]。我在考虑从src_list中获取第n项,并与dst_list的0到n-1项进行比较,当它们匹配时输出索引。最后使用一些字典输出与我的索引相对应的指令。我的方法正确吗?有谁能帮我用python实现这一点吗?在

到目前为止,我尝试过:

 dest = re.findall( r'\[(?=([a-z0-9.]+))',str(line))
 src = re.findall( r'\,(?=([a-z0-9]+))', str(line))
 for i in dest:
                    dst_list.append([i])
 for j in src:
                    src_list.append(j)

#psuedo code to find hazards
for nth src_item in src_list:
     for 0 to n-1 dst_items in dst_list:
          if src_list[src_item] == dst_list[dst_item]
              OUTPUT dst_item -> src_item

在关于芬德尔上面给出了一个包含所有目标操作数的列表和另一个包含源操作数的列表(我需要在一个列表中包含每个指令的2个src参数的列表)。在

我如何实现这一点?在


Tags: ingtsrcadda2列表for指令
1条回答
网友
1楼 · 发布于 2024-06-08 14:03:33

因此,我们首先假设汇编指令的格式是一致的,并且它们在字符串列表中,否则无论如何,您将不得不进行一系列预处理,然后应该处理操作代码和指令解析。在

[op_code dest,src1,src2,...,srcn]

例如:

^{pr2}$

有了它,我们可以做一些python魔术,甚至不用担心regex。在

def instruction_reader(op_string):
    opcode,values = op_string.split(" ")
    values_list = values.split(',')
    dest = values_list[0]
    src = values_list[1:]

    return (opcode,dest,src)

这样,您就可以通过一些列表迭代器将数据放入正确的bucket中

list_of_all = [instruction_reader(item) for item in line1]
opcodes = [op[0] for op in list_of_all]
dests = [dest[1] for dest in list_of_all]
srcs = [src[2] for src in list_of_all]

现在您只需在src和dest之间进行比较就可以找到依赖关系。在

dep_list = []
for i,dest in enumerate(dests):
    for src in srcs:
        if dest in src:
            dep_list.append(opcodes[i])

可以简化为列表理解

dep_list = [opcodes[i] for i,dest in enumerate(dests) for src in srcs if dest in src]

除此之外:是的,在python中有很多更好的方法来实现这一点,但是我认为在这种情况下,更容易阅读/解析的方法会更好。在

相关问题 更多 >