资源简介
解析so文件的工具类,很实用的一个工具类。
代码片段和文件信息
package com.demo.parseso;
/**
* 添加一个Section:
* 1、修改elf头部中的section的总数信息
* 2、在section header中添加一个section header信息
* 3、修改strtab的长度,放置section header的名称
* @author i
*
*/
public class AddSection {
private final static String newSectionName = “.jiangwei“;
private final static int newSectionSize = 1000;
private final static int newSectionNameLen = 0x10;//new section name的长度不能超过0x10
private final static int sectionSize = 40;//一个Section的大小
private final static int stringSectionSizeIndex = 20;//String section中的size字段的index
private final static int programFileSizeIndex = 16;//program header中的file size的index
private final static int elfHeaderSize = 0x34;//elf header的大小
private final static int programHeaderSize = 0x20;//Program Header的大小
private final static int elfHeaderSectionCountIndex = 48;//elf header中的section总数
public static int sectionHeaderOffset;//section header的偏移值
public static short stringSectionInSectionTableIndex;//string section在section list中的index
public static int stringSectionOffset;//string section中的偏移值
public static int firstLoadInPHIndex;//第一个Load类型的Program Header的在Program Header List中的index 从0开始
public static int lastLoadInPHIndex;
public static int addSectionstartAddr = 0;//添加Section段的开始地址
/**
* 修改elf头部总的section的总数信息
*/
public static byte[] changeElfHeaderSectionCount(byte[] src){
byte[] count = Utils.copyBytes(src elfHeaderSectionCountIndex 2);
short counts = Utils.byte2Short(count);
counts++;
count = Utils.short2Byte(counts);
src = Utils.replaceByteAry(src elfHeaderSectionCountIndex count);
return src;
}
/**
* 添加section header信息
* 原理:
* 找到String Section的位置,然后获取他偏移值
* 将section添加到文件末尾
*/
public static byte[] addSectionHeader(byte[] src){
/**
* public byte[] sh_name = new byte[4];
public byte[] sh_type = new byte[4];
public byte[] sh_flags = new byte[4];
public byte[] sh_addr = new byte[4];
public byte[] sh_offset = new byte[4];
public byte[] sh_size = new byte[4];
public byte[] sh_link = new byte[4];
public byte[] sh_info = new byte[4];
public byte[] sh_addralign = new byte[4];
public byte[] sh_entsize = new byte[4];
*/
byte[] newHeader = new byte[sectionSize];
//构建一个New Section Header
newHeader = Utils.replaceByteAry(newHeader 0 Utils.int2Byte(addSectionstartAddr - stringSectionOffset));
newHeader = Utils.replaceByteAry(newHeader 4 Utils.int2Byte(ElfType32.SHT_PROGBITS));//type=PROGBITS
newHeader = Utils.replaceByteAry(newHeader 8 Utils.int2Byte(ElfType32.SHF_ALLOC));
newHeader = Utils.replaceByteAry(newHeader 12 Utils.int2Byte(0x5010));
newHeader = Utils.replaceByteAry(newHeader 16 Utils.int2Byte(0x5010));
newHeader = Utils.replaceByteAry(newHeader 20 Utils.int2Byte(newSectionSize));
newHeader = Utils.replaceByteAry(newHeader 24 Utils.int2Byte(0));
newHeader = Utils.replaceByteAry(newHeader 28 Utils.int2Byte(0));
newHeade
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 301 2015-10-15 09:54 SoFileParse\.classpath
文件 387 2015-10-15 09:54 SoFileParse\.project
文件 598 2015-10-15 09:54 SoFileParse\.settings\org.eclipse.jdt.core.prefs
文件 2408 2015-10-22 11:47 SoFileParse\bin\com\demo\parseso\AddSection.class
文件 43518 2015-10-15 11:33 SoFileParse\bin\com\demo\parseso\elf.h
文件 1852 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_hdr.class
文件 1297 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_phdr.class
文件 939 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_rel.class
文件 1013 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_rela.class
文件 1462 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_shdr.class
文件 843 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$elf32_strtb.class
文件 1176 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32$Elf32_Sym.class
文件 3809 2015-10-19 17:04 SoFileParse\bin\com\demo\parseso\ElfType32.class
文件 784 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_hdr.class
文件 634 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_phdr.class
文件 518 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_rel.class
文件 540 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_rela.class
文件 680 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_shdr.class
文件 608 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64$elf64_sym.class
文件 1252 2015-10-15 12:09 SoFileParse\bin\com\demo\parseso\ElfType64.class
文件 6579 2015-10-22 11:43 SoFileParse\bin\com\demo\parseso\ParseSo.class
文件 5453 2015-10-22 11:41 SoFileParse\bin\com\demo\parseso\Utils.class
文件 13432 2015-10-20 11:53 SoFileParse\so\libhello-jni.so
文件 21496 2015-10-22 11:47 SoFileParse\so\libhello-jnis.so
文件 5352 2015-10-22 11:47 SoFileParse\src\com\demo\parseso\AddSection.java
文件 43518 2015-10-15 11:33 SoFileParse\src\com\demo\parseso\elf.h
文件 9306 2015-10-19 17:04 SoFileParse\src\com\demo\parseso\ElfType32.java
文件 4156 2015-10-15 12:09 SoFileParse\src\com\demo\parseso\ElfType64.java
文件 10871 2015-10-22 11:43 SoFileParse\src\com\demo\parseso\ParseSo.java
文件 5683 2015-10-22 11:41 SoFileParse\src\com\demo\parseso\Utils.java
............此处省略14个文件信息
- 上一篇:MSP430G2553的时钟系统初始化及PWM的呼吸灯
- 下一篇:PSCAD风机模型
评论
共有 条评论