1

当 i 中的名称匹配时,我试图获取 j 的值。但不幸的是,我得到的只是 Functions() 中的最后一个元素。我想这是有道理的。但是,当名称与 GetFunctionName() 的列表匹配时,如何获得 j 的值呢?

是否有任何一行代码可以做到这一点?

func_ea = [j for i in [GetFunctionName(j) for j in Functions()] if name in i]

编辑:感谢 eric 解决了第一个问题 是否有可能将其进一步减少到一个衬垫?

def LocateBytesInFunctions(self, searchterm, *funcname):
    foundaddress = []

    for name in funcname:
        func_ea = [i for i in Functions() if name in GetFunctionName(i)]
        for startea in func_ea:
            endea = GetFunctionAttr(startea, FUNCATTR_END)
            self.debugprint("Start: " + hex(startea) + " End: " + hex(endea))
            foundaddress.extend(self.LocateBytes(searchterm, startea, endea))
    return foundaddress`
4

2 回答 2

1

既然i只用在一处,可以展开内心的领悟:

func_ea = [j for j in Functions() if name in GetFunctionName(j)]
于 2013-06-11T21:52:02.547 回答
0

内在的理解正在运行到完成,所以j被绑定到最后的结果Functions()。解决此问题的一种方法是保留两者j并保留,GetFunctionName(j)以便您稍后可以在理解循环中引用它。

func_ea = [j for i, j in [(GetFunctionName(j), j) for j in Functions()]
             if name in i]
于 2013-06-11T21:45:09.493 回答