import os,sys
import pefile
import pydasm
import struct #print sys.argv def show_section(pe):
print "[sections layout:]"
print "#"*45
print "%10s %10s %10s %10s" % ("section", "addr", "real_size", "alloc_size" )
print "-"*45
for section in pe.sections:
print "%10s %10x %10x %10x" % (section.Name.strip('\x00'), section.VirtualAddress, section.Misc_VirtualSize, section.SizeOfRawData)
print "\n" def show_imports(pe):
pe.parse_data_directories() print "[imports:]"
print "#"*45
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print "%s" % entry.dll.center(45, "-")
print "%10s %30s" % ("addr", "function")
print "-"*45
for imp in entry.imports:
print "%10x %30s" % (imp.address, imp.name)
print "\n" def show_exports(pe):
pe.parse_data_directories() print "[exports:]"
print "#"*45
print "%10s %30s" % ("addr", "function")
print "-"*45
for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols:
print "%10x %30s" % (pe.OPTIONAL_HEADER.ImageBase + exp.address, exp.name)
print "\n" def show_disasm(pe, off_img, count):
print "[disasm %08x - %08x]" % (off_img, off_img + count)
print "-"*45
image_base = pe.OPTIONAL_HEADER.ImageBase
data = pe.get_memory_mapped_image()[off_img:off_img+count]
offset = 0
while offset < len(data):
i = pydasm.get_instruction(data[offset:], pydasm.MODE_32)
raw = ""
for k in range(0,i.length):
raw += "%2X " % (struct.unpack("B", data[offset+k])[0])
print "%25s %-20s" % ( raw, pydasm.get_instruction_string(i, pydasm.FORMAT_INTEL, image_base+off_img))
offset += i.length def show_entry(pe):
print "[entry]"
print "#"*45 off_entry = pe.OPTIONAL_HEADER.AddressOfEntryPoint
show_disasm(pe, off_entry, 100) if __name__ == "__main__":
try:
filename = sys.argv[1]
except:
sys.exit(1) pe = pefile.PE(filename) show_section(pe) show_imports(pe) show_exports(pe) show_entry(pe)

  

pefile解析PE格式的更多相关文章

  1. PE格式第九讲,资源表解析

    PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...

  2. PE格式第五讲,手工添加节表

    PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...

  3. PE格式第七讲,重定位表

    PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...

  4. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

  5. WP8解析JSON格式(使用Newtonsoft.Json包)

    DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...

  6. WP8解析XML格式文件

    DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式,如果要返回XML格式的话,需要在加上format=xml. 这里举一个简单的解析XML格式的例子(更 ...

  7. 基础篇-初步认识PE格式

    1 PE(Portable Executable)格式,是Win32环境可移植可执行文件(如exe.dll.vxd.sys和vdm等)的标准文件格式.PE格式衍生于早期建立在VAX(R)VMS(R)上 ...

  8. NSXMLParser解析xml格式

    NSXMLParser解析xml格式的数据 用法如下: 首先,NSXMLParser必须继续NSXMLParserDelegate协议 @interface XMLHelper : NSObject ...

  9. C语言解析Ini格式文件

    引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...

随机推荐

  1. vi 编辑器使用指南

    一.Unix编辑器概述编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Unix及其相似的ix操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一系列的ex编辑器 ...

  2. 7、c++版,在大学学的编程基础知识

    1.各种排序 #include<iostream> using namespace std; //-------直接插入排序 void InsertSort(ElemType A[],in ...

  3. Ettercap详细参数

    关于界面:ettercap提供 4 种运行界面: Text            #文本模式,参数 -T ,一般配合 -q(安静模式)使用 Curses/GTK         #图形模式,参数 -C ...

  4. Angularjs可以查看scope的插件AngularJS Batarang

    AngularJS Batarang是一个显示AngularJS的scope 层次的Chrome插件,有效的快速查看一个page 中有多少Scope能够帮助我们快速方便调试AngularJS程序. 插 ...

  5. Eclipes更改字体颜色

    有图有真像 更改字体大小

  6. Rust <1>:数据类型、变量、可变性、常量、隐藏

    rust 是强类型语言,所有变量.常量都必须有明确的数据类型:很多情况下,省略类型声明,编译器可自动推导,但不是所有情况下都会成功. rust 有整型.浮点型.布尔型.字符型.数组.元组.枚举.结构体 ...

  7. Java web后台插入数据库中文乱码问题解决

    前言:项目想要避免乱码情况的出现,要保持服务器.数据库.项目.以及前端编码一致.一.项目以及前端编码,设置. myeclipse--->右键项目--->Properties--->R ...

  8. 排序(分组后排序&整排)

    一.整排 要求:根据score进行排名,分数相同,名次相同,且连续 表如下图: sql语句: 方法一:select a.score, (select count(distinct b.score) f ...

  9. 20140903 dynamic_cast和static的区别 链表的冒泡排序和插入排序

    1.四个类型转换 http://www.cnblogs.com/chio/archive/2007/07/18/822389.html static_cast和dynamic_cast的区别 dyna ...

  10. swoole安装异步reids

    /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --enable-async ...