java如何使用PortEx从导入表中获取DLL、函数名和地址?
我将PortEx Java library for PE32 parsing与Capstone反汇编程序一起使用,我希望能够让反汇编程序将适当的call 0x404040
行替换为类似call SomeDLL:TheFunc
的行。为此,我需要从导入表中导入。我能够获得DLL名称和函数,但PortEx报告的地址与之相差甚远,例如:0x32E8与pefile Python模块报告的0x402004。我已经尝试将一些偏移量作为PortEx中的ImportSection
、ImportDLL
和NameImport
类的一部分来查看,但没有接近。有什么想法吗
import com.github.katjahahn.parser.*;
public class ImportsExtractor {
public static Map<Integer,String> extract(PEData exe) throws IOException {
Map<Integer,String> importList = new HashMap<>();
SectionLoader loader = new SectionLoader(exe);
ImportSection idata = loader.loadImportSection();
List<ImportDLL> imports = idata.getImports();
for(ImportDLL dll : imports) {
for(NameImport nameImport : dll.getNameImports()) {
long addr = nameImport.getRVA(); // Some offset needed?
System.out.format("0x%X\t%s:%s%n", addr, dll.getName(), nameImport.getName());
importList.put((int)addr, dll.getName() + ":" + nameImport.getName());
}
}
return importList;
}
}
我希望能够从一行程序集中获取地址,看看它是否在importList
中,如果是,用importList
中的值替换地址
# 1 楼答案
作者: