資源簡介
解析so文件的工具類,很實用的一個工具類。

代碼片段和文件信息
package?com.demo.parseso;
/**
?*?添加一個Section:
?*?1、修改elf頭部中的section的總數(shù)信息
?*?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總數(shù)
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的總數(shù)信息
?*/
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];
//構(gòu)建一個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個文件信息
評論
共有 條評論