python解析elf文件

Elf-Parser:python中的可执行链接文件解析器。 返回访问ELF部分所需的地址。 用于识别ELF文件的动态链接库 小精灵包 解析可执行链接文件(Unix ELF二进制文件)。 有关一般参考,请参见 。 脚本用法 elf.py <输入ELF文件名> 特征 32位和64位ELF解析 ELF类,方便抽象 ElfBytes类用于字节级操作 简要检查 动态链接依赖关系查找 立即下载
#!/usr/bin/python
import struct 
import sys
elfhdr = {}
def verify_elf(filename):
	f = open(filename,'rb')
	elfident = f.read(16)
	magic = [ord(i) for i in elfident]
	if( magic[0] != 127 or magic[1]!= ord('E') or magic[2] != ord('L') or magic[3] != ord('F')):
		print "your input file %s not a elf file" %filename
		return
	else:
		temp = f.read(struct.calcsize('2HI3QI6H'))
		temp = struct.unpack('2HI3QI6H',temp)
		global elfhdr
		elfhdr['magic'] = magic
		elfhdr['e_type']= temp[0]
		elfhdr['e_machine'] = temp[1]
 		elfhdr['e_version'] = temp[2]
		elfhdr['e_entry'] = temp[3]
		elfhdr['e_phoff'] = temp[4]
		elfhdr['e_shoff'] = temp[5]
		elfhdr['e_flags'] = temp[6]
		elfhdr['e_ehsize'] = temp[7]
		elfhdr['e_phentsize'] = temp[8]
		elfhdr['e_phnum'] = temp[9]
		elfhdr['e_shentsize'] = temp[10]
		elfhdr['e_shnum'] = temp[11]
		elfhdr['e_shstrndx'] = temp[12]
	f.close()
def display_elfhdr(elffile):
	global elfhdr
	print "ELF Header"
	magic = elfhdr['magic']
	print "  Magic:  %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" %(magic[0] ,magic[1],magic[2],magic[3],magic[4],magic[5],magic[6],magic[7],magic[8],magic[9],magic[10],magic[11],magic[12],magic[13],magic[14],magic[15])
	if magic[4] == 1 :
		print "  Class:                           ELF32"
	else:
		print "  Class:                           ELF64"
        if magic[5] == 1:
		print "  Data:                            2's complement,little endian"
	else:
		print "Data:                              2's complement,bigendian"
	print "  Version:                         %d(current)" %magic[6]
	if magic[7] == 0:
		os_abi = 'System V ABI'
	elif magic[7]== 1:
		os_abi = 'HP-Ux operating system'
	elif magic[7] == 255:
		os_abi = 'Standalone (embedded) application'
	print "  OS/ABI:                          %s" %os_abi
	print "  ABI Version:                     %d" %magic[8]
	if elfhdr['e_type'] == 0:
		type = 'No file type'
	elif elfhdr['e_type'] == 1:
		type = 'Relocatable object file'
	elif elfhdr['e_type'] == 2:
		type = 'Executable file'
	elif elfhdr['e_type'] == 3:
		type = 'Core file'
	print "  Type:                            %s" %type
	print "  Machine:                         %d" %elfhdr['e_machine']
	print "  Version:                         0x%x" %elfhdr['e_version']
	print "  Entry point address:             0x%x" %elfhdr['e_entry']
	print "  Start of program headers:        %d (bytes into file)" %elfhdr['e_phoff']
	print "  Start of section headers:        %d (bytes into file)" %elfhdr['e_shoff']
	print "  Flags:                           0x%x" %elfhdr['e_flags']
	print "  Size of this header:             %d (bytes)" %elfhdr['e_ehsize']
	print "  Size of program headers:         %d (bytes)" %elfhdr['e_phentsize']
	print "  Number of program headers:       %d " %elfhdr['e_phnum']
	print "  Size of section headers:         %d (bytes)" %elfhdr['e_shentsize']
	print "  Number of section headers:       %d" %elfhdr['e_shnum']
	print "  Section header string table index: %d"%elfhdr['e_shstrndx']
def display_sections(elffile):
    verify_elf(elffile)
    sections = []
    global elfhdr
    sec_start = elfhdr['e_shoff']
    sec_size = elfhdr['e_shentsize']
    f = open(elffile,'rb')
    f.seek(sec_start)
    for i in range(0,elfhdr['e_shnum']):
        temp = f.read(sec_size)
        temp = struct.unpack('2I4Q2I2Q',temp)
        sec = {}
        sec['sh_name'] = temp[0]
        sec['sh_type'] = temp[1]
        sec['sh_flags'] = temp[2]
        sec['sh_addr'] = temp[3]
        sec['sh_offset'] = temp[4]
        sec['sh_size'] = temp[5]
        sec['sh_link'] = temp[6]
        sec['sh_info'] = temp[7]
        sec['sh_addralign'] = temp[8]
        sec['sh_entsize'] = temp[9]
        sections.append(sec)
    print "There are %d section headers,starting at offset 0x%x:\n" %(elfhdr['e_shnum'],sec_start)
    print "Section Headers:"
    print "  [Nr] Name               Type            Address          Offset"
    print "       Size               Entsize         Flags  Link  Info Align"
    start = sections[elfhdr['e_shstrndx']]['sh_offset']
        for i in range(0,elfhdr['e_shnum']):
        offset = start + sections[i]['sh_name']
        name = get_name(f,offset)
        type2str = ['NULL','PROGBITS','SYMTAB','STRTAB','RELA','HASH','DYNAMIC','NOTE','NOBITS','REL','SHLIB','DYNSYM']
        flags = sections[i]['sh_flags']
        if (flags == 1):
            flagsstr = 'W'
        elif (flags == 2):
            flagsstr = 'A'
        elif (flags == 4):
            flagsstr = 'X'
        elif (flags == 3):
            flagsstr = 'W' + 'A'
        elif (flags == 6):
            flagsstr = 'A' +  'X'
        elif (flags == 0x0f000000 or flags == 0xf0000000):
            flagsstr = 'MS'
        else:
            flagsstr = ''
        print "  [%d]  %s              %s             %x             %x" %(i,name,type2str[sections[i]['sh_type'] & 0x7],sections[i]['sh_addr'],sections[i]['sh_addralign'])
        print "      %x                   %x       %s        %d     %d     %x" %(sections[i]['sh_size'],sections[i]['sh_entsize'],flagsstr,sections[i]['sh_link'],sections[i]['sh_info'],sections[i]['sh_addralign'])
    f.close()
def get_name(f,offset):
    name = ''
    f.seek(offset)
    while 1:
        c = f.read(1)
        if c == '\0':
            break
        else:
            name += c
    return name
if __name__ == '__main__':
file = sys.argv[1]
verify_elf(file)
display_elfhdr(file)
display_sections(file)

未完待续







        
在Python中解析ELF和DWARF-Python开发 pyelftools pyelftools是一个纯Python库,用于解析和分析ELF文件和DWARF调试信息。 有关更多详细信息,请参见《用户指南》。 前提条件作为pyelftools的用户,仅需要Pyt pyelftools pyelftools是一个纯Python库,用于解析和分析ELF文件和DWARF调试信息。 有关更多详细信息,请参见《用户指南》。 前提条件作为pyelftools的用户,一个人仅需要运行Python。 它适用于Python版本2.7和3.x(x> = 5)。 对于在pyelftools上进行黑客入侵,要求更为严格,请参阅黑客指南。 可以从PyPI(Python包索引)安装pyelftools:> pip install pyelftools或者,您也可以 立即下载

相关推荐

ELF文件的解析工具源码

这是一个资源文件解析工具的源码,是转载的

Python-ELF文件处理:pyelftools模块

>返回Python系列文章目录

u011079613的博客 4289

Python-Exodus这个工具可以轻松地将LinuxELF二进制文件从一个系统重定位到另一个系统

Exodus:这个工具可以轻松地将Linux ELF二进制文件从一个系统重定位到另一个系统

Python解析ELF文件获取全局变量的的地址和长度,用以替换XCP和freemaster的方案

最近准备对ECU内部变量进行读写标定,之前公司大佬提供了nxp的freemaster的工具标定方案,但是担心以后芯片换成其他公司后这个方案就无法使用了,最近自己研究了下其他方案,通过解析编译生成的ELF文件,获取变量的的地址和长度,本文将记录如何获取结构体变量地址的方法,其中大部分参考了链接:点击这里中这位大佬的解析提示:以下是本篇文章正文内容,下面案例可供参考拿到这些信息后,我们就可以通过jlink结合实现类似CANoe的XCP或者freemaster的MCU内部的全局变量标定方案了。

weixin_43153912的博客 4439

ELF文件symbol分析

分析了ELF文件中symbol

ELF文件格式分析.pdf-cdeKey_T6AII5KBAOOQAHXK5YFNNSEQU36YU76U.pdf

本文 是作者在探索系统软件构件的复用技术的过程中生成的技术笔记,重点分析了 UNIX 类操作系统中普遍采用的目标文件格式 ELF(Executable and Linkable Format),目的是研究操作系统中二进制级软件构件的静态、动态组装技术。 本文首先介绍 ELF 文件格式规范,然后结合一个简单的 C 语言程序,分析编 译、链接后生成的可重定位、可执行格式实例

pyelftools,一个能解析ELF文件的Python库,嵌入式开发的分析利器

多精彩内容在公众号。ELF(Executable and Linkable Format)文件格式是一种用于表示可执行文件、目标文件、共享库和核心转储的标准文件格式。它被广泛应用于Linux和许多类Unix操作系统中。ELF文件格式的设计允许程序和数据的高效存储,同时也支持程序的链接和加载。

5138

保姆级教程:用Ubuntu 22.04搭建RustDesk中继服务器(含Cloudflare避坑指南)

本教程详细指导如何在Ubuntu 22.04上搭建RustDesk中继服务器,解决跨国远程协作的延迟问题。涵盖环境配置、Rust编译优化、服务部署及Cloudflare代理设置等关键步骤,帮助用户实现高性能的私有中继服务。

weixin_29002209的博客 526

ELF文件格式的详解

ELF文件格式的详解

zhangqing2002的博客 1261

好书分享:Control and Estimation with MATLAB(5th Edition)pdf

基于MATLAB的控制与估计》(第5版)由八章组成,包括控制算法和设计。主要内容包括状态估计和数据平滑、RLS和卡尔曼滤波器状态估计、控制系统设计、自适应控制和PID。书中的概念已经使用MATLAB和Simulink实现。提供了可下载的MATLAB和Simulink文件。适合人群:大学生、研究生、控制类工程研究人员。需要电子版pdf,回复索取。

jixianhu的博客 1510

突破Shopee平台数据采集的风控挑战与技术解决方案

高效、稳定、合规的数据采集能力,始终是我们服务的核心价值。多类型代理组合:采用高匿名住宅代理(模拟真实用户IP)与数据中心代理(高并发需求)混合策略,结合IP轮换频率与目标国家后缀(如.com.my、.vn)动态匹配14。反反爬数据过滤:针对Shopee页面中的混淆数据(如虚假价格标签、隐藏元素),采用XPath精准定位结合正则表达式清洗,确保数据准确性89。随机化请求间隔:在爬虫代码中引入随机延迟(如1-5秒),并模拟“浏览-点击-滚动”等用户行为链,降低行为模式的可预测性48。

klj3388的博客 2977

python3 elf文件解析

原地址:https://github.com/guanchao/elfParser 作者是用python2写的,现在给出我修改后的python3版本。(测试发现有bug,以后自己写个,0.0) 1 #!/usr/bin/env python 2 # coding:utf-8 3 4 import sys 5 import binasci...

2134

Qt中常见的面试题总结

基于Qt开发的一些常用面试题

一名热爱编程的程序员 8492

【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中创建 Python 程序 | 导入 ELFFile 库 | 解析 ELF 文件 )

文章目录一、程序头数据 一、程序头数据 00:17:44

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3283

单细胞双胞过滤-scrublet安装

pip install scrublet ----use-pep517有如下报错,分析可知安装annoy时不会自动更新gcc的版本,centos默认是4.8.5。pip install scrublet ----use-pep517 仍然报错,但似乎不影响使用,提示Successfully installed。打开终端,进入Python环境,输入以下代码,查看Python安装位置。暂时还没尝试是否存在问题,如果存在问题,降级scrublet版本。包的开发依赖的是比较低版本的numpy,会用到。

hzau_t的博客 792

CUDA系列-Stream-1

This section describes static aspects of the CUSW_UNIT_STREAM unit’s architecture.和stream相关的其它Unit主要有Channel,Sync,Memmgr A CUDA stream is a software FIFO queue that allows commands like kernel launch and memcpy to be enqueued in it. The enqueued commands

weixin_43360707的博客 734

python 文件 解析ddl_使用python解析Dwarf2 格式ELF文件

背景由于ELF文件包含调试需要的debug信息,本文介绍下如何基于python来解析ELF文件,来获取想要的信息。pyelftools具体可参考官方仓库介绍:eliben/pyelftoolspyelfwrapper一个基于pyelftools的工具,解析elf文件,提供api以获取变量的地址信息等:Install use pip.$ pip install pyelfwrapper How to...

weixin_39827036的博客 471

基于 Matlab 的亚像素边缘检测算法:Zernike 矩

Zernike 矩是一种基于正交多项式的特征提取算法,可以用于分析和描述数字图像中的形状和结构。Zernike 矩可以描述图像在不同方向、不同比例和旋转角度下的变化情况,因此具有很好的不变性和鲁棒性。在基于 Zernike 矩的亚像素边缘检测算法中,我们首先需要将原始图像转换为极坐标系下的图像。然后,对每个像素点,计算其在不同方向下的一阶导数和二阶导数,并将其转换为极坐标系下的形式。其中,“n”表示次数,“m”表示阶数,“rho”和“theta”分别表示极坐标系下的半径和角度。% 转换为极坐标系下的形式。

2301_79325339的博客 982

Python如何深度解析ELF文件?5个实用技巧带你掌握二进制分析

你是否曾经好奇过Linux系统上那些可执行文件内部究竟隐藏着什么秘密?当你在终端运行`./program`时,系统如何知道这个文件是有效的程序?答案就藏在ELF文件格式中,而PyELFTools正是揭开这些秘密的利器。 ## 为什么需要ELF文件分析工具? ELF(Executable and Linkable Format)是Linux和类UNIX系统中标准的可执行文件格式。无论是系统程序、

gitblog_00520的博客 800

轨道平面系与轨道姿态系

文章摘要: 轨道平面系与轨道姿态系是航天任务中两个核心坐标系。轨道平面系(惯性系)以地心为原点,Z轴沿轨道角动量方向,用于轨道确定和机动规划;轨道姿态系(如LVLH系)以航天器质心为原点,Z轴指向地心,用于姿态控制和对地观测。两者通过旋转矩阵相互转换:轨道平面系基于轨道根数构建,保持静态;而LVLH系随轨道运动连续旋转。前者适用于全局轨道分析,后者支撑局部任务执行。理解二者的定义差异(原点、基准轴、惯性属性)及数学转换关系,对航天器姿态轨道控制系统的设计与操作至关重要。

ScilogyHunter的博客 86

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python ELF文件解析利器:PyELFTools深度解析

你是否曾经好奇Linux系统中的可执行文件内部究竟隐藏着什么秘密?🤔 那些神秘的二进制文件,其实都遵循着ELF(可执行与可链接格式)这一标准结构。今天,让我们一同探索Python世界中的ELF解析神器——PyELFTools。 ## 从二进制迷宫到清晰路径 想象一下,当你面对一个复杂的ELF文件时,就像是站在一个巨大的迷宫中。PyELFTools就是你的导航仪,它能够将二进制数据转化为可读的

gitblog_00546的博客 1245

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

grib1文件解析 python_使用python解析Dwarf2 格式ELF文件

背景由于ELF文件包含调试需要的debug信息,本文介绍下如何基于python来解析ELF文件,来获取想要的信息。pyelftools具体可参考官方仓库介绍:eliben/pyelftoolspyelfwrapper一个基于pyelftools的工具,解析elf文件,提供api以获取变量的地址信息等:Install use pip.$ pip install pyelfwrapper How to...

weixin_30487899的博客 274

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★

使用 Python 解析 ELF 文件完整代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3214

终极指南:使用Python pyelftools深度解析ELF二进制文件

在Linux和类UNIX系统的世界中,ELF(Executable and Linkable Format)格式是二进制文件的核心标准。无论是可执行程序、共享库还是核心转储文件,都采用这种统一格式。对于开发者、安全研究人员和系统管理员而言,理解并操作ELF文件已成为必备技能。而pyelftools正是为此而生的强大Python工具库。 ## 快速上手:安装与基础使用 ### 环境准备与安装

gitblog_00111的博客 1075

Python ELF文件解析利器:PyELFTools深度实战指南

PyELFTools是一个功能强大的Python库,专门用于解析ELF(可执行与可链接格式)和DWARF调试信息。作为Linux和类UNIX系统中最常见的二进制文件格式,ELF包含了程序执行所需的所有关键信息。通过PyELFTools,开发者能够深入了解二进制文件的内部结构,进行专业的逆向工程和调试分析。 ## 🚀 快速入门:安装与环境配置 要开始使用PyELFTools,首先需要安装该库。

gitblog_00070的博客 923

【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )

一、Capstone 反汇编框架、 二、PyCharm 中导入 Capstone 反汇编框架

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1693
上一篇: llvm安装过程问题
下一篇: 学习规划
Xalloc
博客等级 码龄16年 25粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值