0

我的目标:使用 pyelftool 从 elf 文件中检索变量绝对位置和函数绝对地址,以自动化白盒测试的断点位置。

我的代码:

import elftools
from elftools.elf.elffile import ELFFile
filename="./DemoBm.elf"
with open(filename, 'rb') as f:
    elffile = ELFFile(f)
    if not elffile.has_dwarf_info():
        print('  file has no DWARF info')
        exit()
    dwarfinfo = elffile.get_dwarf_info()
    pubnames = dwarfinfo.get_pubnames()
    pubtypes = dwarfinfo.get_pubtypes()
    for elem in pubnames:
        print(elem, pubnames[elem])

我的问题:上面的代码返回 cu_ofs 和 die_ofs,比如

memSegment NameLUTEntry(cu_ofs=47377, die_ofs=47586)
Eep_GetData NameLUTEntry(cu_ofs=78737, die_ofs=78936)

cu_ofs 和 die_ofs 不是目标上的真实地址(例如,我可以使用 Ozone 检查,从源代码跳转到反汇编视图) - 目标上函数的第一条汇编指令的地址是 0x2524。

如何使用 pyelftool 从 elf 文件中检索函数和变量的地址?

4

1 回答 1

0

找到了我正在寻找的答案,至少就我的目的而言:

def bkpt_addr_get(self, funcname):
    info = self.dwarfinfo.get_DIE_from_lut_entry(self.pubnames[funcname])
    funct_addr=info.attributes["DW_AT_low_pc"].value
    if self.verbose:
        print(hex(funct_addr))
    return hex(funct_addr)
于 2022-02-28T13:22:29.497 回答