首页
社区
课程
招聘
[原创]一个AndroidManifest.xml解析工具源码
发表于: 2024-8-1 06:26 4239

[原创]一个AndroidManifest.xml解析工具源码

2024-8-1 06:26
4239

起因是在论坛看到了AndroidManifest 二进制解析笔记这篇文章,原贴是C++写的,而且没有完整的源码。网上找到的其他文章都是拿Java写的,太笨重了。于是我动手用Go写了这么一个工具,可以在附件里下载到。


除了解析成结构体之外,这个工具还能把解析完成的结构体写回到文件里。


如何阅读:直接拉到main函数,就可以看到解析和写入的两个函数的调用。源码很简单,总共就400行,照着下面这个图,读一下代码就可以了。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-8-12 16:57 被Jobcrazy编辑 ,原因:
上传的附件:
收藏
免费 5
支持
分享
最新回复 (13)
雪    币: 102
活跃值: (2150)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
mark,顶A导。
2024-8-1 10:26
0
雪    币: 38
活跃值: (1931)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
A导 yyds
2024-8-1 14:17
0
雪    币: 233
活跃值: (370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

214行报错 unexpected EOF

上传的附件:
2024-8-1 14:39
0
雪    币: 178
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
曰曰 214行报错 unexpected EOF
可以自行按需修改一下,我代码里没有判断文件是否已经到末尾,只是按图里的结构进行了遍历。文件头里有写文件应该是多大:

type HEADER struct {
       ResType    uint16
       HeaderSize uint16
       Filesize   uint32  <-- 这一行
}

也可以对照010Editor+AndroidManifest.bt的插件解析的结果
2024-8-2 05:44
0
雪    币: 6501
活跃值: (4912)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
嘿嘿,其实已经贴出大部分代码了
2024-8-5 09:25
0
雪    币: 178
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
简单的简单 嘿嘿,其实已经贴出大部分代码了
嘿嘿,感谢原作者
2024-8-6 11:40
0
雪    币: 1426
活跃值: (3105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2024-8-7 13:55
0
雪    币: 178
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
曰曰 214行报错&nbsp;unexpected EOF

我对着010Editor检查了一下,发现Chunk之间不一定是紧密相连的,可能有被0填充的空隙。而我的代码是连续读取的,所以导致了这个错误。可以自行把代码改一下,因为每个Chunk的size在Chunk的头里面都有,读完了之后根据这个size跳转到下一个Chunk再读,就没问题了。

最后于 2024-8-11 12:04 被Jobcrazy编辑 ,原因:
2024-8-11 12:04
0
雪    币: 233
活跃值: (370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Jobcrazy 曰曰 214行报错&amp;nbsp;unexpected EOF 我对着010Editor检查了一下,发现Chunk之 ...
好的,感谢
2024-8-11 12:24
0
雪    币: 45
活跃值: (386)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
goggoog
2024-9-4 12:10
0
雪    币: 27
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
有代码就是好
2024-9-5 22:41
0
雪    币: 950
活跃值: (1405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi
13

亲自运行了一下,发现了一个问题,但是我也没有找到问题原因,怀疑跟编译的版本或者xxx设置相关。

 binary.Read(file, binary.LittleEndian, &data.ResChunk.ResType) 这里的ResType会读取出来两种值,对比发现是因为xml文件有两个字节没对上

解决办法就是read两次(ResType正好两个字节,可以读取多于的两个字节)

2024-9-25 15:41
0
雪    币: 178
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
tmi 亲自运行了一下,发现了一个问题,但是我也没有找到问题原因,怀疑跟编译的版本或者xxx设置相关。&nbsp;binary.Read(file, binary.LittleEndian, & ...
你可能遇到了我在9楼说的情况?可以按我说的用之前读到的Chunk Size来判断是否到了结尾
2024-10-24 08:50
0
游客
登录 | 注册 方可回帖
返回
//