首页 > 代码库 > 检查打开的文件是不是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_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;
}
#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;
}
检查打开的文件是不是ELF格式的文件,如果是就输出节头表的文件偏移
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。