检查打开的文件是不是ELF格式的文件,提取“特别”的节中的信息

//检查打开的文件是不是ELF格式的文件

//检验ELF头

//获得节头表的地址

//遍历节头表,依次查看一个节的属性,从节头字符串表中找到其名称,如果名称和“特别”的section名匹配,则找到此节的地址

//提取“特别”的节中的信息

//显示上面提取的信息

#include<stdio.h>

#include<elf.h>

#include<stdlib.h>

#include<string.h>

int main(int argc,char *argv[])

{

FILE *fp;

Elf64_Ehdr *ehdr;

Elf64_Shdr *shdr;

char buffer[1024]={0};

int i=0,j=0;

long length;

fp=fopen(argv[1],"rb");

if(fp==NULL)

{

printf("can not open %s\n",argv[1]);

return -1;

}

ehdr = (Elf64_Ehdr *)malloc(sizeof(Elf64_Ehdr));

shdr = (Elf64_Shdr *)malloc(sizeof(Elf64_Shdr));

fread(ehdr,sizeof(Elf64_Ehdr),1,fp);

if(ehdr->e_ident[EI_MAG0] == ELFMAG0 ||

ehdr->e_ident[EI_MAG1] == ELFMAG1 ||

ehdr->e_ident[EI_MAG2] == ELFMAG2 ||

ehdr->e_ident[EI_MAG3] == ELFMAG3)

{

printf("此文件是ELF文件!\n");

printf("节头表地址是 %p\n",ehdr+ehdr->e_shoff);

//获取节头字符串表地址

fseek(fp,ehdr->e_shoff,0);

fread(shdr,sizeof(Elf64_Shdr),ehdr->e_shnum,fp);

length = shdr[ehdr->e_shstrndx].sh_offset;

printf("节头字符串表的地址 %p\n",length);

//获取字符串表各节名称

fseek(fp,length,0);

fread(buffer,1,sizeof(buffer),fp);

//匹配"infosection"

for(i=0;i<=(int)ehdr->e_shnum;i++)

{

char *name=&buffer[shdr[i].sh_name];

if(!strcmp(name,".infosection"))

{

printf("匹配到的section name is %s\n", name);

char temp[shdr[i].sh_size];

fseek(fp, shdr[i].sh_offset, 0);

fread(temp, 1, shdr[i].sh_size, fp);

printf("匹配到的节的 message is : %s", temp);

}

}

}

else

{

printf("此文件不是ELF文件\n");

}

fclose(fp);

return 0;

}

时间: 2024-10-14 18:28:51

检查打开的文件是不是ELF格式的文件,提取“特别”的节中的信息的相关文章

检查打开的文件是不是ELF格式的文件,如果是就输出节头表的文件偏移

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include "elf.h" #define FALSE 0 #define TURE 1 #define MAX_S

PDF文件转DWG格式的文件要如何进行转换?

PDF文件转DWG格式的文件要如何进行转换?小伙伴们都知道,在CAD行业中,我们最常见的就是dwg格式的文件,但是要交给你的客户的时候dwg格式的文件不方便进行查看,就需要将文件转换成PDF,但又在查看过程中发现编辑错误的地方,就需要进行修改,只能在CAD编辑器中进行修改文件内容,编辑器中只能打开dwg格式的文件,那就还需要在将文件进行转换,那PDF文件转dwg格式的文件要如何进行转换.下面我们就一起来看看具体操作方法吧,想要了解的朋友可以一起来看看. 步骤一:首先,打开电脑,在电脑桌面上任意的

linux下的ELF格式分析

ELF格式文档详解 一,ELF格式综述 ELF(Executable and Linkable Format)是Linux下的一种格式标准,Linux中的ELF格式文件一共有四种: ●可重定位文件(Relocatable File):这类文件包含了代码和数据,可被用来链接成可执行文件或者共享目录文件,扩展名为.o ●可执行文件(Executable File):这类文件包含了可以直接执行的程序,一般没有扩展名 ●共享目录文件(Shared Object File):这类文件包含了代码和数据,扩展

.elf格式内容

arm-linux-ld 可以将程序链接成我们arm平台下的可运行的程序 以之前使用过的led程序为例: 首先: 1 arm-linux-gcc -g -c led.S (-g是表示产生调试信息, -c是表示只编译不链接) 产生led.o文件 1 arm-linux-ld -Tled.lds -o led.elf led.o 产生.elf格式的文件 然后通过: arm-linux-readelf命令:读出.elf的详细内容: 1 arm-linux-readelf -a led.elf(显示所有

bin文件和elf文件

ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executable) 共享库(Shared Object,或者Shared Library) ELF格式提供了两种不同的视角,链接器把ELF文件看成是Section的集合,而加载器把ELF文件看成是Segment的集合. 有一篇文章介绍elf文件的格式以及加载过程介绍的很详细,可以看一下,地址:http://ww

BIN、HEX,ELF,AXF文件的区别

嵌入式软件开发中文件格式 1.Bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式".按照assembly code顺序翻译成binary machine code,内部没有地址标记.Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小. BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可.可以直接在裸机上运行. 2.Hex Intel hex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理

ELF格式的组成结构

LF指的是Executable and Linkable Format.最初是由UNIX系统实验室作为应用程序二进制接口开发和发行的,后来逐渐发展成为了可执行文件的格式标准,在很多操作系统和非操作系统环境中都有非常广泛的应用.完整的ELF格式标准涉及了三个方面的内容.在这里我们只需要关心一个方面,那就是一个ELF格式可执行程序的组成结构. 一个ELF可执行文件格式如图8-1所示. 像图8-1那样,一个ELF可执行文件包含了一个描述全局信息的ELF文件头.若干个Program头.若干个Segmen

【经验分享】PPT文件转换PDF格式操作方法

说到PPT文件和PDF格式的文件,应该都比较熟悉了吧!毕竟使我们办公中常用所使用到的文件格式.有时候在处理完PPT文件的时候为了不让别人随意改动里面的内容,就可以将PPT文件转成PDF格式,对于怎么进行文件转换呢?可能部分人就会问到这样一个问题,接下来小编可以将自己所知道的方法告诉大家! 1:在操作的电脑桌面上新建一个新的文件夹并将所要转换格式的PPT文件添加进去,之后将文件夹命名为PPT转换文件.2:接着下面就可以利用到第三方工具,进入到浏览器中搜索PDF转换工具,需要将它安装到电脑中.运行软

ELF格式文件符号表全解析及readelf命令使用方法

http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                                                  ELF64  Data: