clean doc

This commit is contained in:
Jean-Marie Mineau 2023-08-30 14:18:32 +02:00
parent b5ae8c5088
commit df2a441148
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
13 changed files with 84 additions and 80 deletions

5
TODO.md Normal file
View file

@ -0,0 +1,5 @@
- edditable format
- python binding
- sanity checks
- tests
- https://source.android.com/docs/core/runtime/dex-format#system-annotation

View file

@ -4,7 +4,7 @@ use std::io::Write;
// To derive Serializable // To derive Serializable
use crate as androscalpel_serializer; use crate as androscalpel_serializer;
/// Encoded Annotation https://source.android.com/docs/core/runtime/dex-format#encoded-annotation /// <https://source.android.com/docs/core/runtime/dex-format#encoded-annotation>
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct EncodedAnnotation { pub struct EncodedAnnotation {
/// Type of the annotation. This must be a class (not array or primitive) type. /// Type of the annotation. This must be a class (not array or primitive) type.
@ -20,7 +20,7 @@ impl EncodedAnnotation {
} }
} }
/// Annotation: https://source.android.com/docs/core/runtime/dex-format#annotation-element /// <https://source.android.com/docs/core/runtime/dex-format#annotation-element>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct AnnotationElement { pub struct AnnotationElement {
pub name_idx: Uleb128, pub name_idx: Uleb128,

View file

@ -7,23 +7,23 @@ use crate as androscalpel_serializer;
use crate::{ReadSeek, Result, Serializable}; use crate::{ReadSeek, Result, Serializable};
use std::io::Write; use std::io::Write;
/// https://source.android.com/docs/core/runtime/dex-format#referenced-from-class_def_item_1 /// <https://source.android.com/docs/core/runtime/dex-format#referenced-from-class_def_item_1>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct AnnotationDirectoryItem { pub struct AnnotationDirectoryItem {
/// 0 if they are no annotation, else offset of an [`AnnotationSetItem`]. /// 0 if they are no annotation, else offset of an [`crate::AnnotationSetItem`].
pub class_annotations_off: u32, pub class_annotations_off: u32,
// pub fields_size: u32, // pub fields_size: u32,
// pub annotated_methods_size: u32, // pub annotated_methods_size: u32,
// pub annotated_parameters_size: u32, // pub annotated_parameters_size: u32,
/// List of field annotation. The field annotations must be sorted by /// List of field annotation. The field annotations must be sorted by
/// increasing order of [`FieldAnnotation.field_idx`]. /// increasing order of [`crate::FieldAnnotation.field_idx`].
pub field_annotations: Vec<FieldAnnotation>, pub field_annotations: Vec<FieldAnnotation>,
/// List of method annotation. The method annotations must be sorted by /// List of method annotation. The method annotations must be sorted by
/// increasing order of [`MethodAnnotation.method_idx`]. /// increasing order of [`crate::MethodAnnotation.method_idx`].
pub method_annotation: Vec<MethodAnnotation>, pub method_annotation: Vec<MethodAnnotation>,
/// List of associated method parameter annotation. The parameter annotations /// List of associated method parameter annotation. The parameter annotations
/// must be sorted by increasing order of [`ParameterAnnotation.parameter_size`]. /// must be sorted by increasing order of [`crate::ParameterAnnotation.parameter_size`].
pub parameter_annotations: Vec<ParameterAnnotation>, pub parameter_annotations: Vec<ParameterAnnotation>,
} }
@ -105,7 +105,7 @@ impl Serializable for AnnotationDirectoryItem {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#field-annotation /// <https://source.android.com/docs/core/runtime/dex-format#field-annotation>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct FieldAnnotation { pub struct FieldAnnotation {
pub field_idx: u32, pub field_idx: u32,
@ -113,7 +113,7 @@ pub struct FieldAnnotation {
pub annotation_off: u32, pub annotation_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#method-annotation /// <https://source.android.com/docs/core/runtime/dex-format#method-annotation>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct MethodAnnotation { pub struct MethodAnnotation {
pub method_idx: u32, pub method_idx: u32,
@ -121,7 +121,7 @@ pub struct MethodAnnotation {
pub annotation_off: u32, pub annotation_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#parameter-annotation /// <https://source.android.com/docs/core/runtime/dex-format#parameter-annotation>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct ParameterAnnotation { pub struct ParameterAnnotation {
pub field_idx: u32, pub field_idx: u32,
@ -129,7 +129,7 @@ pub struct ParameterAnnotation {
pub annotation_off: u32, pub annotation_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#set-ref-list /// <https://source.android.com/docs/core/runtime/dex-format#set-ref-list>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct AnnotationSetRefList { pub struct AnnotationSetRefList {
@ -164,14 +164,14 @@ impl Serializable for AnnotationSetRefList {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#set-ref-item /// <https://source.android.com/docs/core/runtime/dex-format#set-ref-item>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct AnnotationSetRefItem { pub struct AnnotationSetRefItem {
/// 0 if there are no annotation, offset to a [`AnnotationSetItem`] else. /// 0 if there are no annotation, offset to a [`AnnotationSetItem`] else.
pub annotations_off: u32, pub annotations_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#annotation-set-item /// <https://source.android.com/docs/core/runtime/dex-format#annotation-set-item>
/// alignment: 4 /// alignment: 4
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct AnnotationSetItem { pub struct AnnotationSetItem {
@ -207,14 +207,14 @@ impl Serializable for AnnotationSetItem {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#off-item /// <https://source.android.com/docs/core/runtime/dex-format#off-item>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct AnnotationOffItem { pub struct AnnotationOffItem {
/// Offset to a [`AnnotationItem`] /// Offset to a [`crate::AnnotationItem`]
pub annotation_off: u32, pub annotation_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#annotation-item /// <https://source.android.com/docs/core/runtime/dex-format#annotation-item>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct AnnotationItem { pub struct AnnotationItem {
pub visibility: AnnotationVisibility, pub visibility: AnnotationVisibility,
@ -222,7 +222,7 @@ pub struct AnnotationItem {
} }
// TODO: Enum or flags ? // TODO: Enum or flags ?
/// https://source.android.com/docs/core/runtime/dex-format#annotation-item /// <https://source.android.com/docs/core/runtime/dex-format#annotation-item>
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
#[prefix_type(u8)] #[prefix_type(u8)]
pub enum AnnotationVisibility { pub enum AnnotationVisibility {

View file

@ -2,7 +2,7 @@ use crate::{EncodedValue, Uleb128};
use crate::{ReadSeek, Result, Serializable}; use crate::{ReadSeek, Result, Serializable};
use std::io::Write; use std::io::Write;
/// Encoded Array: https://source.android.com/docs/core/runtime/dex-format#encoded-array /// <https://source.android.com/docs/core/runtime/dex-format#encoded-array>
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct EncodedArray { pub struct EncodedArray {
// pub size: Uleb128, // pub size: Uleb128,

View file

@ -1,5 +1,5 @@
//! The string representation, encoded in MUTF-8 //! The string representation, encoded in MUTF-8
//! https://source.android.com/docs/core/runtime/dex-format#mutf-8 //! <https://source.android.com/docs/core/runtime/dex-format#mutf-8>
//! //!
//! The encoding of codepoint in MUTF-8 is as following (table from //! The encoding of codepoint in MUTF-8 is as following (table from
//! <https://py2jdbc.readthedocs.io/en/latest/mutf8.html>): //! <https://py2jdbc.readthedocs.io/en/latest/mutf8.html>):
@ -16,7 +16,7 @@ use crate as androscalpel_serializer;
use crate::core::*; use crate::core::*;
pub use androscalpel_serializer_derive::*; pub use androscalpel_serializer_derive::*;
/// [string-data-item](https://source.android.com/docs/core/runtime/dex-format#string-data-item) /// <https://source.android.com/docs/core/runtime/dex-format#string-data-item>
#[derive(Serializable, PartialEq, Eq, Debug)] #[derive(Serializable, PartialEq, Eq, Debug)]
pub struct StringDataItem { pub struct StringDataItem {
pub utf16_size: Uleb128, pub utf16_size: Uleb128,
@ -251,8 +251,8 @@ impl StringDataItem {
mod test { mod test {
use super::*; use super::*;
/// Test for bug found in https://github.com/TkTech/mutf8/tree/master: /// Test for bug found in <https://github.com/TkTech/mutf8/tree/master>:
/// https://github.com/TkTech/mutf8/blob/master/tests/test_bugs.py /// <https://github.com/TkTech/mutf8/blob/master/tests/test_bugs.py>
#[test] #[test]
fn bug_tktech_mutf8() { fn bug_tktech_mutf8() {
let string_issue_1 = "[가 나 다 라 마 바 사 아 자 차 카 타 파 하]"; let string_issue_1 = "[가 나 다 라 마 바 사 아 자 차 카 타 파 하]";
@ -285,8 +285,8 @@ mod test {
assert_eq!(&decoded, string_issue_3); assert_eq!(&decoded, string_issue_3);
} }
/// Test from https://github.com/TkTech/mutf8/tree/master, test for bad encoding /// Test from <https://github.com/TkTech/mutf8/tree/master>, test for bad encoding
/// Test for bug found in https://github.com/TkTech/mutf8/tree/master: /// Test for bug found in <https://github.com/TkTech/mutf8/tree/master>:
#[test] #[test]
fn test_tktech_bad_mutf8() { fn test_tktech_bad_mutf8() {
assert!(TryInto::<String>::try_into(StringDataItem { assert!(TryInto::<String>::try_into(StringDataItem {
@ -311,8 +311,8 @@ mod test {
.is_err()); .is_err());
} }
/// Test from https://github.com/TkTech/mutf8/tree/master, test 2 bytes /// Test from <https://github.com/TkTech/mutf8/tree/master>, test 2 bytes
/// Test for bug found in https://github.com/TkTech/mutf8/tree/master: /// Test for bug found in <https://github.com/TkTech/mutf8/tree/master>:
#[test] #[test]
fn test_tktech_2_bytes_mutf8() { fn test_tktech_2_bytes_mutf8() {
let tests = vec![ let tests = vec![
@ -350,8 +350,8 @@ mod test {
} }
} }
/// Test from https://github.com/TkTech/mutf8/tree/master, test 3 bytes /// Test from <https://github.com/TkTech/mutf8/tree/master>, test 3 bytes
/// Test for bug found in https://github.com/TkTech/mutf8/tree/master: /// Test for bug found in <https://github.com/TkTech/mutf8/tree/master>:
#[test] #[test]
fn test_tktech_3_bytes_mutf8() { fn test_tktech_3_bytes_mutf8() {
let tests = vec![ let tests = vec![
@ -411,8 +411,8 @@ mod test {
} }
} }
/// Test from https://github.com/TkTech/mutf8/tree/master, test 6 bytes /// Test from <https://github.com/TkTech/mutf8/tree/master>, test 6 bytes
/// Test for bug found in https://github.com/TkTech/mutf8/tree/master: /// Test for bug found in <https://github.com/TkTech/mutf8/tree/master>:
#[test] #[test]
fn test_tktech_6_bytes_mutf8() { fn test_tktech_6_bytes_mutf8() {
let tests = vec![ let tests = vec![

View file

@ -4,7 +4,7 @@ use crate as androscalpel_serializer;
use crate::{ReadSeek, Result, Serializable, SerializableUntil, Sleb128, Uleb128, Uleb128p1}; use crate::{ReadSeek, Result, Serializable, SerializableUntil, Sleb128, Uleb128, Uleb128p1};
use std::io::Write; use std::io::Write;
/// https://source.android.com/docs/core/runtime/dex-format#debug-info-item /// <https://source.android.com/docs/core/runtime/dex-format#debug-info-item>
#[derive(Debug, PartialEq, Eq, Clone)] #[derive(Debug, PartialEq, Eq, Clone)]
pub struct DebugInfoItem { pub struct DebugInfoItem {
pub line_start: Uleb128, pub line_start: Uleb128,

View file

@ -4,25 +4,25 @@ use crate as androscalpel_serializer;
use crate::{ReadSeek, Result, Serializable, Uleb128}; use crate::{ReadSeek, Result, Serializable, Uleb128};
use std::io::Write; use std::io::Write;
/// https://source.android.com/docs/core/runtime/dex-format#class-def-item /// <https://source.android.com/docs/core/runtime/dex-format#class-def-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct ClassDefItem { pub struct ClassDefItem {
/// Index of a [`TypeIdItem`] in `type_ids`, must be a class. /// Index of a [`crate::TypeIdItem`] in `type_ids`, must be a class.
pub class_idx: u32, pub class_idx: u32,
/// See [access-flags](https://source.android.com/docs/core/runtime/dex-format#access-flags) /// See <https://source.android.com/docs/core/runtime/dex-format#access-flags>
pub access_flags: u32, pub access_flags: u32,
/// Either index of a [`TypeIdItem`] in `type_ids`, must be a class or NO_INDEX /// Either index of a [`crate::TypeIdItem`] in `type_ids`, must be a class or NO_INDEX
pub superclass_idx: u32, pub superclass_idx: u32,
/// 0 if no interfaces, else offset to a [`TypeList`]. /// 0 if no interfaces, else offset to a [`crate::TypeList`].
pub interfaces_off: u32, pub interfaces_off: u32,
/// Index of a [`StringIdItem`] in `string_ids` or NO_INDEX. /// Index of a [`crate::StringIdItem`] in `string_ids` or [`crate::NO_INDEX`].
pub source_file_idx: u32, pub source_file_idx: u32,
/// 0 if no annotation, else offset to a [`AnnotationDirectoryItem`]. /// 0 if no annotation, else offset to a [`crate::AnnotationDirectoryItem`].
pub annotations_off: u32, pub annotations_off: u32,
/// 0 if no data for this class, else offset to a [`ClassDataItem`]. /// 0 if no data for this class, else offset to a [`crate::ClassDataItem`].
pub class_data_off: u32, pub class_data_off: u32,
/// 0 if no static fields, else offset to an [`EncodedArrayItem`]. /// 0 if no static fields, else offset to an [`crate::EncodedArrayItem`].
/// ///
/// Notes: /// Notes:
/// ///
@ -36,7 +36,7 @@ pub struct ClassDefItem {
pub static_values_off: u32, pub static_values_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#method-handle-item /// <https://source.android.com/docs/core/runtime/dex-format#method-handle-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct MethodHandleItem { pub struct MethodHandleItem {
@ -46,7 +46,7 @@ pub struct MethodHandleItem {
pub unused2: u16, pub unused2: u16,
} }
/// https://source.android.com/docs/core/runtime/dex-format#method-handle-type-codes /// <https://source.android.com/docs/core/runtime/dex-format#method-handle-type-codes>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
#[prefix_type(u16)] #[prefix_type(u16)]
pub enum MethodHandleType { pub enum MethodHandleType {
@ -70,7 +70,7 @@ pub enum MethodHandleType {
InvokeInterface, InvokeInterface,
} }
/// https://source.android.com/docs/core/runtime/dex-format#class-data-item /// <https://source.android.com/docs/core/runtime/dex-format#class-data-item>
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct ClassDataItem { pub struct ClassDataItem {
// pub static_fields_size: Uleb128, // pub static_fields_size: Uleb128,
@ -180,7 +180,7 @@ impl Serializable for ClassDataItem {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-field-format /// <https://source.android.com/docs/core/runtime/dex-format#encoded-field-format>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct EncodedField { pub struct EncodedField {
/// Index into the `field_ids` list for the identity of this field /// Index into the `field_ids` list for the identity of this field
@ -191,7 +191,7 @@ pub struct EncodedField {
pub access_flags: Uleb128, pub access_flags: Uleb128,
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-method /// <https://source.android.com/docs/core/runtime/dex-format#encoded-method>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct EncodedMethod { pub struct EncodedMethod {
/// Index into the `method_ids list` for the identity of this method /// Index into the `method_ids list` for the identity of this method
@ -200,11 +200,11 @@ pub struct EncodedMethod {
/// first element in a list is represented directly. /// first element in a list is represented directly.
pub method_idx_diff: Uleb128, pub method_idx_diff: Uleb128,
pub access_flags: Uleb128, pub access_flags: Uleb128,
/// 0 if abstract or native, else offset to a [`CodeItem`]. /// 0 if abstract or native, else offset to a [`crate::CodeItem`].
pub code_off: Uleb128, pub code_off: Uleb128,
} }
/// https://source.android.com/docs/core/runtime/dex-format#type-list /// <https://source.android.com/docs/core/runtime/dex-format#type-list>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct TypeList { pub struct TypeList {
@ -244,7 +244,7 @@ impl Serializable for TypeList {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#type-item-format /// <https://source.android.com/docs/core/runtime/dex-format#type-item-format>
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct TypeItem { pub struct TypeItem {
/// Index into the `type_ids` list. /// Index into the `type_ids` list.

View file

@ -4,7 +4,7 @@ use crate as androscalpel_serializer;
use crate::{Error, ReadSeek, Result, Serializable, Sleb128, Uleb128}; use crate::{Error, ReadSeek, Result, Serializable, Sleb128, Uleb128};
use std::io::Write; use std::io::Write;
/// https://source.android.com/docs/core/runtime/dex-format#code-item /// <https://source.android.com/docs/core/runtime/dex-format#code-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Clone, Debug, PartialEq, Eq)] #[derive(Clone, Debug, PartialEq, Eq)]
pub struct CodeItem { pub struct CodeItem {
@ -12,7 +12,7 @@ pub struct CodeItem {
pub ins_size: u16, pub ins_size: u16,
pub outs_size: u16, pub outs_size: u16,
// pub tries_size: u16, // pub tries_size: u16,
/// 0 if no debug info, else offset to a [`DebugInfoItem`]. /// 0 if no debug info, else offset to a [`crate::DebugInfoItem`].
pub debug_info_off: u32, pub debug_info_off: u32,
// pub insns_size: u32, // pub insns_size: u32,
pub insns: Vec<u16>, pub insns: Vec<u16>,
@ -166,7 +166,7 @@ impl Serializable for CodeItem {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#type-item /// <https://source.android.com/docs/core/runtime/dex-format#type-item>
#[derive(Serializable, Clone, Copy, Debug, PartialEq, Eq)] #[derive(Serializable, Clone, Copy, Debug, PartialEq, Eq)]
pub struct TryItem { pub struct TryItem {
/// Start address of the block of code covered. It's a count of 16-bit code unit to the /// Start address of the block of code covered. It's a count of 16-bit code unit to the
@ -179,7 +179,7 @@ pub struct TryItem {
pub handler_off: u16, pub handler_off: u16,
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-catch-handlerlist /// <https://source.android.com/docs/core/runtime/dex-format#encoded-catch-handlerlist>
#[derive(Clone, Debug, PartialEq, Eq)] #[derive(Clone, Debug, PartialEq, Eq)]
pub struct EncodedCatchHandlerList { pub struct EncodedCatchHandlerList {
// pub size: Uleb128, // pub size: Uleb128,
@ -191,9 +191,9 @@ impl EncodedCatchHandlerList {
Uleb128(self.list.len() as u32) Uleb128(self.list.len() as u32)
} }
/// Return a reference to the [`EncodedCatchHandler`] located at `offset` bytes after /// Return a reference to the [`crate::EncodedCatchHandler`] located at `offset` bytes after
/// the begining of the [`EncodedCatchHandlerList`]. Expected to be used to lookup /// the begining of the [`crate::EncodedCatchHandlerList`]. Expected to be used to lookup
/// the value refered to by [`TryItem.handler_off`]. /// the value refered to by [`crate::TryItem.handler_off`].
pub fn get_handler_at_offset(&self, offset: u16) -> Result<&EncodedCatchHandler> { pub fn get_handler_at_offset(&self, offset: u16) -> Result<&EncodedCatchHandler> {
let offset = offset as usize; let offset = offset as usize;
let mut current_offset = 0; let mut current_offset = 0;
@ -238,7 +238,7 @@ impl Serializable for EncodedCatchHandlerList {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-catch-handler /// <https://source.android.com/docs/core/runtime/dex-format#encoded-catch-handler>
#[derive(Clone, Debug, PartialEq, Eq)] #[derive(Clone, Debug, PartialEq, Eq)]
pub struct EncodedCatchHandler { pub struct EncodedCatchHandler {
// pub size: Sleb128, // pub size: Sleb128,
@ -313,10 +313,10 @@ impl Serializable for EncodedCatchHandler {
} }
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-type-addr-pair /// <https://source.android.com/docs/core/runtime/dex-format#encoded-type-addr-pair>
#[derive(Serializable, Clone, Copy, Debug, PartialEq, Eq)] #[derive(Serializable, Clone, Copy, Debug, PartialEq, Eq)]
pub struct EncodedTypeAddrPair { pub struct EncodedTypeAddrPair {
/// Index of the [`TypeId`] in `type_ids` /// Index of the [`crate::TypeIdItem`] in `type_ids`
pub type_idx: Uleb128, pub type_idx: Uleb128,
/// Bytecode address of the exception handler /// Bytecode address of the exception handler
pub addr: Uleb128, pub addr: Uleb128,

View file

@ -1,13 +1,12 @@
//! The header item: https://source.android.com/docs/core/runtime/dex-format#header-item //! The header item: <https://source.android.com/docs/core/runtime/dex-format#header-item>
use crate as androscalpel_serializer; use crate as androscalpel_serializer;
use crate::{DexFileMagic, EndianConstant, Serializable}; use crate::{DexFileMagic, EndianConstant, Serializable};
/// The header item: https://source.android.com/docs/core/runtime/dex-format#header-item /// <https://source.android.com/docs/core/runtime/dex-format#header-item>
///
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, PartialEq, Eq, Debug)] #[derive(Serializable, PartialEq, Eq, Debug)]
pub struct UserItem { pub struct HeaderItem {
pub magic: DexFileMagic, pub magic: DexFileMagic,
pub checksum: u32, pub checksum: u32,
pub signature: [u8; 20], pub signature: [u8; 20],

View file

@ -4,7 +4,7 @@ use crate as androscalpel_serializer;
use crate::{Error, ReadSeek, Result, Serializable, Uleb128}; use crate::{Error, ReadSeek, Result, Serializable, Uleb128};
use std::io::{Cursor, Write}; use std::io::{Cursor, Write};
/// https://source.android.com/docs/core/runtime/dex-format#hiddenapi-class-data-item /// <https://source.android.com/docs/core/runtime/dex-format#hiddenapi-class-data-item>
/// Hard to serialize/deserialize without additional data like the number of classes /// Hard to serialize/deserialize without additional data like the number of classes
/// or the method/field of the classes. /// or the method/field of the classes.
#[derive(Clone, PartialEq, Eq)] #[derive(Clone, PartialEq, Eq)]

View file

@ -1,10 +1,10 @@
//! The map item: https://source.android.com/docs/core/runtime/dex-format#map-list //! The map item: <https://source.android.com/docs/core/runtime/dex-format#map-list>
use crate as androscalpel_serializer; use crate as androscalpel_serializer;
use crate::core::{ReadSeek, Result, Serializable}; use crate::core::{ReadSeek, Result, Serializable};
use std::io::Write; use std::io::Write;
/// The map item: https://source.android.com/docs/core/runtime/dex-format#map-list /// <https://source.android.com/docs/core/runtime/dex-format#map-list>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Clone, PartialEq, Eq, Debug)] #[derive(Clone, PartialEq, Eq, Debug)]
pub struct MapList { pub struct MapList {
@ -12,7 +12,7 @@ pub struct MapList {
pub list: Vec<MapItem>, pub list: Vec<MapItem>,
} }
/// The location and size of an item: https://source.android.com/docs/core/runtime/dex-format#map-item /// The location and size of an item: <https://source.android.com/docs/core/runtime/dex-format#map-item>
#[derive(Serializable, Clone, PartialEq, Eq, Debug)] #[derive(Serializable, Clone, PartialEq, Eq, Debug)]
pub struct MapItem { pub struct MapItem {
pub type_: MapItemType, pub type_: MapItemType,
@ -21,7 +21,7 @@ pub struct MapItem {
pub offset: u32, pub offset: u32,
} }
/// The type of the items refered by a [`MapItem`]: https://source.android.com/docs/core/runtime/dex-format#type-codes /// The type of the items refered by a [`MapItem`]: <https://source.android.com/docs/core/runtime/dex-format#type-codes>
#[derive(Serializable, Clone, Copy, PartialEq, Eq, Debug)] #[derive(Serializable, Clone, Copy, PartialEq, Eq, Debug)]
#[prefix_type(u16)] #[prefix_type(u16)]
pub enum MapItemType { pub enum MapItemType {

View file

@ -15,7 +15,7 @@ pub use header::*;
pub use hiddenapi::*; pub use hiddenapi::*;
pub use map::*; pub use map::*;
/// https://source.android.com/docs/core/runtime/dex-format#string-item /// <https://source.android.com/docs/core/runtime/dex-format#string-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct StringIdItem { pub struct StringIdItem {
@ -24,7 +24,7 @@ pub struct StringIdItem {
pub use crate::StringDataItem; pub use crate::StringDataItem;
/// https://source.android.com/docs/core/runtime/dex-format#type-id-item /// <https://source.android.com/docs/core/runtime/dex-format#type-id-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct TypeIdItem { pub struct TypeIdItem {
@ -32,7 +32,7 @@ pub struct TypeIdItem {
pub descriptor_idx: u32, pub descriptor_idx: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#proto-id-item /// <https://source.android.com/docs/core/runtime/dex-format#proto-id-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct ProtoIdItem { pub struct ProtoIdItem {
@ -44,7 +44,7 @@ pub struct ProtoIdItem {
pub parameters_off: u32, pub parameters_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#field-id-item /// <https://source.android.com/docs/core/runtime/dex-format#field-id-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct FieldIdItem { pub struct FieldIdItem {
@ -56,7 +56,7 @@ pub struct FieldIdItem {
pub name_idx: u32, pub name_idx: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#method-id-item /// <https://source.android.com/docs/core/runtime/dex-format#method-id-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct MethodIdItem { pub struct MethodIdItem {
@ -68,7 +68,7 @@ pub struct MethodIdItem {
pub name_idx: u32, pub name_idx: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#call-site-id-item /// <https://source.android.com/docs/core/runtime/dex-format#call-site-id-item>
/// alignment: 4 bytes /// alignment: 4 bytes
#[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, Copy, PartialEq, Eq)]
pub struct CallSiteIdItem { pub struct CallSiteIdItem {
@ -76,23 +76,23 @@ pub struct CallSiteIdItem {
pub call_site_off: u32, pub call_site_off: u32,
} }
/// https://source.android.com/docs/core/runtime/dex-format#encoded-array-item /// <https://source.android.com/docs/core/runtime/dex-format#encoded-array-item>
/// alignment: none /// alignment: none
#[derive(Serializable, Debug, Clone, PartialEq, Eq)] #[derive(Serializable, Debug, Clone, PartialEq, Eq)]
pub struct EncodedArrayItem { pub struct EncodedArrayItem {
pub value: EncodedArray, pub value: EncodedArray,
} }
/// https://source.android.com/docs/core/runtime/dex-format#call-site-item /// <https://source.android.com/docs/core/runtime/dex-format#call-site-item>
/// ///
/// The call_site_item is an encoded_array_item whose elements correspond to /// The call_site_item is an encoded_array_item whose elements correspond to
/// the arguments provided to a bootstrap linker method. /// the arguments provided to a bootstrap linker method.
/// ///
/// The first three arguments are: /// The first three arguments are:
/// - A method handle representing the bootstrap linker method ([`EncodedValue::MethodHandle`]) /// - A method handle representing the bootstrap linker method ([`crate::EncodedValue::MethodHandle`])
/// - A method name that the bootstrap linker should resolve ([`EncodedValue::String`]) /// - A method name that the bootstrap linker should resolve ([`crate::EncodedValue::String`])
/// - A method type corresponding to the type of the method name to be resolved /// - A method type corresponding to the type of the method name to be resolved
/// ([`EncodedValue::MethodType`]) /// ([`crate::EncodedValue::MethodType`])
/// ///
/// Any additional arguments are constant values passed to the bootstrap linker method. /// Any additional arguments are constant values passed to the bootstrap linker method.
/// These arguments are passed in order and without any type conversions. /// These arguments are passed in order and without any type conversions.

View file

@ -1,10 +1,10 @@
//! The encoded value format: https://source.android.com/docs/core/runtime/dex-format#encoding //! The encoded value format: <https://source.android.com/docs/core/runtime/dex-format#encoding>
use crate::{EncodedAnnotation, EncodedArray, Error, ReadSeek, Result, Serializable}; use crate::{EncodedAnnotation, EncodedArray, Error, ReadSeek, Result, Serializable};
use std::io::Write; use std::io::Write;
/// An encoded value of arbitrary hierachically structured data: /// An encoded value of arbitrary hierachically structured data:
/// https://source.android.com/docs/core/runtime/dex-format#encoding /// <https://source.android.com/docs/core/runtime/dex-format#encoding>
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub enum EncodedValue { pub enum EncodedValue {
Byte(i8), Byte(i8),