1.一種dex文件的存儲(chǔ)方法,其特征在于,包括:
解析待加載的dex文件,提取解析后的dex文件的非文件頭header中的第一指定數(shù)據(jù);
申請(qǐng)第一內(nèi)存和第二內(nèi)存,所述第一內(nèi)存用于存儲(chǔ)所述第一指定數(shù)據(jù),所述第二內(nèi)存用于存儲(chǔ)dex文件中除第一指定數(shù)據(jù)之外的其他數(shù)據(jù);所述第一內(nèi)存和第二內(nèi)存不連續(xù);
根據(jù)所述第一內(nèi)存的內(nèi)存地址信息,修改dex文件的文件頭header中所述第一指定數(shù)據(jù)的偏移地址,使其指向第一內(nèi)存。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,完成文件頭header中所述第一指定數(shù)據(jù)的偏移地址的修改后,還包括:
根據(jù)修改后的dex文件的文件頭header信息,完成解析后的dex文件的加載,將所述第一指定數(shù)據(jù)加載到第一內(nèi)存中,將所述其它數(shù)據(jù)加載到第二內(nèi)存中。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述第一指定數(shù)據(jù)包括以下幾種數(shù)據(jù)中的至少一種:
字符串列表區(qū)段string_ids、數(shù)據(jù)類(lèi)型列表區(qū)段type_ids、方法原型列表區(qū)段proto_ids、類(lèi)成員列表區(qū)段field_ids、方法列表區(qū)段method_ids、類(lèi)列表區(qū)段class_defs、數(shù)據(jù)區(qū)區(qū)段data。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第一內(nèi)存為一段連續(xù)的內(nèi)存空間。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第一指定數(shù)據(jù)的種類(lèi)大于一種,所述第一內(nèi)存至少包括兩段不連續(xù)的內(nèi)存空間,不連續(xù)的第一內(nèi)存空間的段數(shù)不大于第一指定數(shù)據(jù)的種類(lèi)數(shù)。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,完成解析后的dex文件的加載后,還包括:
刪除所述第二內(nèi)存中的dex文件的文件頭header中的第二指定數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二指定數(shù)據(jù)包括以下數(shù)據(jù)中的至少一種:
魔數(shù)字段magic、校驗(yàn)碼字段checksum、簽名字段signature、文件總長(zhǎng)度字段fileSize、文件頭長(zhǎng)度字段header_size、字節(jié)順序常量標(biāo)識(shí)字段endian_tag、map數(shù)據(jù)基地址字段map_off。
8.一種dex文件的存儲(chǔ)裝置,其特征在于,包括:
指定數(shù)據(jù)提取模塊,用于解析待加載的dex文件,提取解析后的dex文件的非文件頭header中的第一指定數(shù)據(jù);
內(nèi)存申請(qǐng)模塊,用于申請(qǐng)第一內(nèi)存和第二內(nèi)存,所述第一內(nèi)存用于存儲(chǔ)所述第一指定數(shù)據(jù),所述第二內(nèi)存用于存儲(chǔ)dex文件中除第一指定數(shù)據(jù)之外的其他數(shù)據(jù);所述第一內(nèi)存和第二內(nèi)存不連續(xù);
文件頭修改模塊,用于根據(jù)所述第一內(nèi)存的內(nèi)存地址信息,修改dex文件的文件頭header中所述第一指定數(shù)據(jù)的偏移地址,使其指向第一內(nèi)存。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括:
Dex內(nèi)存加載模塊,用于在完成文件頭header中所述第一指定數(shù)據(jù)的偏移地址的修改后,根據(jù)修改后的dex文件的文件頭header信息,完成解析后的dex文件的加載,將所述第一指定數(shù)據(jù)加載到第一內(nèi)存中,將所述其它數(shù)據(jù)加載到第二內(nèi)存中。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括:
文件頭數(shù)據(jù)刪除模塊,用于在完成解析后的dex文件的加載后,刪除所述第二內(nèi)存中的dex文件的文件頭header中的第二指定數(shù)據(jù)。