分享早期的一个Android Elf解析器

本文分享了一个早期的Android Elf解析器,旨在减少重复造轮子。提供了头文件和源码供学习使用,要求注明来源并保留作者版权。
摘要由CSDN通过智能技术生成

基于学习和分享的目的,你可以自行下载,随意进行更改,但需要注明出处,版权属于我个人所有。

分享目的减少造轮子

头文件:

/**
 *
 * For Elf parse by Dynmic segment
 * For android exe protect
 *
 * Author : sp00f
 *
 **/
#ifndef ELF_PARSER_H_
#define ELF_PARSER_H_

#include <elf.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


#include <android/log.h>


#define MAX_STRTAB_NAME_LEN	25
#if !defined(ELFSIZE) && defined(ARCH_ELFSIZE)
#define ELFSIZE ARCH_ELFSIZE
#endif

#if defined(ELFSIZE)
#define CONCAT(x,y)	__CONCAT(x,y)
#define ELFNAME(x)	CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
#define ELFNAME2(x,y)	CONCAT(x,CONCAT(_elf,CONCAT(ELFSIZE,CONCAT(_,y))))
#define ELFNAMEEND(x)	CONCAT(x,CONCAT(_elf,ELFSIZE))
#define ELFDEFNNAME(x)	CONCAT(ELF,CONCAT(ELFSIZE,CONCAT(_,x)))
#endif

#ifndef __LP64__ //defined(ELFSIZE) && (ELFSIZE == 32)
#define Elf_Ehdr	Elf32_Ehdr
#define Elf_Phdr	Elf32_Phdr
#define Elf_Shdr	Elf32_Shdr
#define Elf_Sym		Elf32_Sym
#define Elf_Rel		Elf32_Rel
#define Elf_RelA	Elf32_Rela
#define Elf_Dyn		Elf32_Dyn
#define Elf_Half	Elf32_Half
#define Elf_Word	Elf32_Word
#define Elf_Sword	Elf32_Sword
#define Elf_Addr	Elf32_Addr
#define Elf_Off		Elf32_Off
#define Elf_Nhdr	Elf32_Nhdr
#define Elf_Note	Elf32_Note

#ifndef ELF_R_SYM
#define ELF_R_SYM	ELF32_R_SYM
#endif
#ifndef ELF_R_TYPE
#define ELF_R_TYPE	ELF32_R_TYPE
#endif
#ifndef ELF_R_INFO
#define ELF_R_INFO	ELF32_R_INFO
#endif
#define ELFCLASS	ELFCLASS32
#ifndef ELF_ST_BIND
#define ELF_ST_BIND	ELF32_ST_BIND
#endif
#ifndef ELF_ST_TYPE
#define ELF_ST_TYPE	ELF32_ST_TYPE
#endif
#ifndef ELF_ST_INFO
#define ELF_ST_INFO	ELF32_ST_INFO
#endif

#define AuxInfo		Aux32Info
#else	//#elif defined(ELFSIZE) && (ELFSIZE == 64)
#define Elf_Ehdr	Elf64_Ehdr
#define Elf_Phdr	Elf64_Phdr
#define Elf_Shdr	Elf64_Shdr
#define Elf_Sym		Elf64_Sym
#define Elf_Rel		Elf64_Rel
#define Elf_RelA	Elf64_Rela
#define Elf_Dyn		Elf64_Dyn
#define Elf_Half	Elf64_Half
#define Elf_Word	Elf64_Word
#define Elf_Sword	Elf64_Sword
#define Elf_Addr	Elf64_Addr
#define Elf_Off		Elf64_Off
#define Elf_Nhdr	Elf64_Nhdr
#define Elf_Note	Elf64_Note

#ifndef ELF_R_SYM
#define ELF_R_SYM	ELF64_R_SYM
#endif

#ifndef ELF_R_TYPE
#define ELF_R_TYPE	ELF64_R_TYPE
#endif
#ifndef ELF_R_INFO
#define ELF_R_INFO	ELF64_R_INFO
#endif
#define ELFCLASS	ELFCLASS64

#define AuxInfo		Aux64Info
#endif

#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 &&am
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值