Python 我应该将哪些字节传递给Capstone以反汇编PE文件的可执行代码

Python 我应该将哪些字节传递给Capstone以反汇编PE文件的可执行代码,python,portable-executable,disassembly,capstone,Python,Portable Executable,Disassembly,Capstone,我正在尝试使用python使用pefile和capstone反汇编一个PE可执行文件,以便稍后从该代码中获得CFG。我的想法是将PE文件中保存可执行代码的部分传递给capstone。我所不知道的是我应该传递给capstone的确切部分,以便在构造CFG时不会分解多余的代码,并且可以解析RVA(即jo 0x10df9和地址0x10df9在分解的指令列表中)。我试过了 md.disasm(pe.get_memory_mapped_image(), pe.OPTIONAL_HEADER.Add

我正在尝试使用python使用pefile和capstone反汇编一个PE可执行文件,以便稍后从该代码中获得CFG。我的想法是将PE文件中保存可执行代码的部分传递给capstone。我所不知道的是我应该传递给capstone的确切部分,以便在构造CFG时不会分解多余的代码,并且可以解析RVA(即jo 0x10df9和地址0x10df9在分解的指令列表中)。我试过了

    md.disasm(pe.get_memory_mapped_image(), pe.OPTIONAL_HEADER.AddressOfEntryPoint)
但我担心它会从PE的入口点到结尾进行反汇编,我只想反汇编可执行代码。我一直在阅读有关PE格式的文章,而且代码很可能总是出现在section.text中。我也在考虑把这一部分带上:

    code_section = pe.get_section_by_rva(pe.OPTIONAL_HEADER.AddressOfEntryPoint)
然后将该段的数据从入口点的字节开始传递到顶点,我认为可以将数据从起始点限定到该段的结尾

    md.disasm(code_section.get_data(pe.OPTIONAL_HEADER.AddressOfEntryPoint))

但是在本节的末尾可能是不应该被反汇编的代码(我想,不确定)。所以我要问的是,我应该传递哪些字节到Capstone来反汇编PE文件的可执行代码。

您不需要传递参数来获取\u数据

这应该行得通

import pefile
from capstone import *

def disassemble(file_path):
    pe = pefile.PE(file_path)

    eop = pe.OPTIONAL_HEADER.AddressOfEntryPoint
    code_section = pe.get_section_by_rva(eop)

    code_dump = code_section.get_data()

    code_addr = pe.OPTIONAL_HEADER.ImageBase + code_section.VirtualAddress

    md = Cs(CS_ARCH_X86, CS_MODE_64)

    for i in md.disasm(code_dump, code_addr):
        print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

disassemble("/path/to/pe/file")

谢谢你的回答。你能提供我在C++中的例子吗?提前谢谢。