您的位置:首页 > 其它

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

2014-09-12 08:38 393 查看
#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_SIZE 52

#define Elf_Ehdr Elf64_Ehdr

int OpenElf(char *filename)

{

int fd;

fd = open(filename, O_RDONLY);

if(fd == -1){

printf("Open %s Error!\n", filename);

return FALSE;

}

return fd;

}

//读取Elf头部表函数 :int ReadElf(int fd);

int ReadElf(int fd)

{

char str[MAX_SIZE];

int num;

Elf_Ehdr ehdr64;

memset(str, 0, MAX_SIZE);

if((num = read(fd, str, 52)) != 52){

perror("File NO ELF!\n");

return FALSE;

}

if((str[0] == 0x7f) && (str[1] == 'E') && (str[2] == 'L') && (str[3] == 'F')){

printf("This is ELF file.\n");

printf("文件类别: ");

switch(str[4]){

case 0:

printf("非法目标文件\n");

break;

case 1:

printf("32位目标文件\n");

break;

case 2:

printf("64位目标文件\n");

break;

default:

break;

}

printf("节头表偏移:%p\n",ehdr64.e_shoff);

}else{

perror("File NO ELF!\n");

return FALSE;

}

}

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

{

int boolen;

if(argc == 2){

boolen = OpenElf(argv[1]);

if(boolen == FALSE){

printf("open %s fail!",argv[1]);

return -1;

}

else

{

ReadElf(boolen);

}

}

else

{

printf("参数格式不正确!请正确输入:./main testfile\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐