예제 #1
0
    def iterFuncChunks(self, ea):
        start = self.funcStart(ea)
        end = self.funcEnd(ea)

        if not start or not end:
            return []

        current = idc.FirstFuncFchunk(start)
        chunks = [current]

        while True:
            next = idc.NextFuncFchunk(start, current)

            if next != idc.BADADDR:
                current = next
                chunks.append(next)
            else:
                break

        res = []
        for chunk in chunks:
            chunk_end = idc.GetFchunkAttr(chunk, idc.FUNCATTR_END)
            res.extend(list(self.iterInstructions(chunk, chunk_end)))

        return res
예제 #2
0
 def __chunks(cls, ea):
     '''enumerates all chunks in a function '''
     res = idc.FirstFuncFchunk(ea)
     while res != idc.BADADDR:
         (start, end) = idc.GetFchunkAttr(res, idc.FUNCATTR_START), idc.GetFchunkAttr(res, idc.FUNCATTR_END)
         yield start,end
         res = idc.NextFuncFchunk(ea, res)
     return
예제 #3
0
def FunctionChunks(addr):
    result = []
    entry = idc.GetFunctionAttr(addr, idc.FUNCATTR_START)

    chunk = idc.FirstFuncFchunk(entry)
    if chunk == BADADDR:
        return result

    # list the function chunks
    result.append([chunk, idc.GetFchunkAttr(chunk, idc.FUNCATTR_END)])
    while chunk != BADADDR:
        chunk = idc.NextFuncFchunk(entry, chunk)
        if chunk != BADADDR:
            result.append([chunk, idc.GetFchunkAttr(chunk, idc.FUNCATTR_END)])

    return result
예제 #4
0
def enumerate_function_chunks(f_start):
    """
    The function gets a list of chunks for the function.
    @f_start - first address of the function
    @return - list of chunks
    """
    # Enumerate all chunks in the function
    chunks = list()
    first_chunk = idc.FirstFuncFchunk(f_start)
    chunks.append((first_chunk, idc.GetFchunkAttr(first_chunk,
                                                  idc.FUNCATTR_END)))
    next_chunk = first_chunk
    while next_chunk != 0xffffffffL:
        next_chunk = idc.NextFuncFchunk(f_start, next_chunk)
        if next_chunk != 0xffffffffL:
            chunks.append(
                (next_chunk, idc.GetFchunkAttr(next_chunk, idc.FUNCATTR_END)))
    return chunks