fix annotation linking

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2024-01-25 11:19:45 +01:00
parent eece6178f9
commit 832f6b7711
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 20 additions and 0 deletions

View file

@ -2328,6 +2328,24 @@ impl DexWriter {
} }
} }
/// Link the offsets of annotations_directory_item in class_def_items.
///
/// # Warning
///
/// Linking can only occur once all sections are entirelly generated.
fn link_annotation_directories(&mut self) {
debug!("Link the annotations_directory_item entries in class_def_items");
for class_def in self.class_defs_list.iter_mut() {
// prelink value is set to offset in the section + 1 (to distinguish with 0)
if class_def.annotations_off != 0 {
class_def.annotations_off += self
.section_manager
.get_offset(Section::AnnotationsDirectoryItem)
- 1;
}
}
}
/// Link the offsets of static_values_off in class_def_items. /// Link the offsets of static_values_off in class_def_items.
/// ///
/// # Warning /// # Warning
@ -2464,6 +2482,7 @@ impl DexWriter {
self.link_call_site_ids(); self.link_call_site_ids();
self.link_type_list_occurences()?; self.link_type_list_occurences()?;
self.link_class_data_occurences(); self.link_class_data_occurences();
self.link_annotation_directories();
self.link_static_values(); self.link_static_values();
self.link_debug_info(); self.link_debug_info();
self.link_annotations(); self.link_annotations();

View file

@ -8,6 +8,7 @@ use crate::{
use log::{error, info, warn}; use log::{error, info, warn};
use std::io::{Cursor, Seek, SeekFrom}; use std::io::{Cursor, Seek, SeekFrom};
#[derive(Debug)]
pub struct DexFileReader<'a> { pub struct DexFileReader<'a> {
data: &'a [u8], data: &'a [u8],
header: HeaderItem, header: HeaderItem,