• 大小: 58KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-25
  • 语言: 其他
  • 标签: 解析so  

资源简介

解析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个文件信息

评论

共有 条评论

相关资源