From 42698cc8d7e7945a904f8b2585832bb7da8e2de0 Mon Sep 17 00:00:00 2001 From: Jean-Marie Mineau Date: Fri, 25 Aug 2023 15:04:05 +0200 Subject: [PATCH] add miscelaneous items --- androscalpel_serializer/src/items/header.rs | 2 + androscalpel_serializer/src/items/map.rs | 2 + androscalpel_serializer/src/items/mod.rs | 56 +++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/androscalpel_serializer/src/items/header.rs b/androscalpel_serializer/src/items/header.rs index 36557f6..cde287e 100644 --- a/androscalpel_serializer/src/items/header.rs +++ b/androscalpel_serializer/src/items/header.rs @@ -3,6 +3,8 @@ use crate::{DexFileMagic, EndianConstant}; /// The header item: https://source.android.com/docs/core/runtime/dex-format#header-item +/// +/// alignment: 4 bytes #[derive(Serializable, PartialEq, Eq, Debug)] pub struct UserItem { pub magic: DexFileMagic, diff --git a/androscalpel_serializer/src/items/map.rs b/androscalpel_serializer/src/items/map.rs index 9fba630..5fbf34d 100644 --- a/androscalpel_serializer/src/items/map.rs +++ b/androscalpel_serializer/src/items/map.rs @@ -4,6 +4,8 @@ use crate as androscalpel_serializer; use crate::core::{ReadSeek, Result, Serializable}; use std::io::Write; +/// The map item: https://source.android.com/docs/core/runtime/dex-format#map-list +/// alignment: 4 bytes #[derive(Clone, PartialEq, Eq, Debug)] pub struct MapList { // pub size: u32, diff --git a/androscalpel_serializer/src/items/mod.rs b/androscalpel_serializer/src/items/mod.rs index 5e5b83d..41ee1da 100644 --- a/androscalpel_serializer/src/items/mod.rs +++ b/androscalpel_serializer/src/items/mod.rs @@ -1,7 +1,63 @@ //! The items structures. +use crate as androscalpel_serializer; +use crate::Serializable; + pub mod header; pub mod map; pub use header::*; pub use map::*; + +/// https://source.android.com/docs/core/runtime/dex-format#string-item +/// alignment: 4 bytes +#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] +pub struct StringIdItem { + pub string_data_off: u32, +} + +pub use crate::StringDataItem; + +/// https://source.android.com/docs/core/runtime/dex-format#type-id-item +/// alignment: 4 bytes +#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] +pub struct TypeIdItem { + /// Index of a [`StringIdItem`] in `string_ids`. + pub descriptor_idx: u32, +} + +/// https://source.android.com/docs/core/runtime/dex-format#proto-id-item +/// alignment: 4 bytes +#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] +pub struct ProtoIdItem { + /// Index of a [`StringIdItem`] in `string_ids`. + pub shorty_idx: u32, + /// Index of a [`TypeIdItem`] in `type_ids`. + pub return_type_idx: u32, + /// 0 if no parameter, else offset to a [`TypeList`. + pub parameters_off: u32, +} + +/// https://source.android.com/docs/core/runtime/dex-format#field-id-item +/// alignment: 4 bytes +#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] +pub struct FieldIdItem { + /// Index of a [`TypeIdItem`] in `type_ids`], must be a class. + pub class_idx: u16, + /// Index of a [`TypeIdItem`] in `type_ids`. + pub type_idx: u16, + /// Index of a [`StringIdItem`] in `string_ids`. + pub name_idx: u32, +} + +/// https://source.android.com/docs/core/runtime/dex-format#method-id-item +/// alignment: 4 bytes +#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] +pub struct MethodIdItem { + /// Index of a [`TypeIdItem`] in `type_ids`], must be a class. + pub class_idx: u16, + /// Index of a [`ProtoIdItem`] in `proto_ids`. + pub proto_idx: u16, + /// Index of a [`StringIdItem`] in [`HeaderItem.string_ids`]. + pub name_idx: u32, +}