Struct Strings

pub struct Strings<'a> { /* private fields */ }
Expand description

‘#Strings’ hold various identifiers which are referenced form other tables within the CIL metadata. e.g. various strings for reflection: function names, 0xclass names, 0xvariables, 0x…

The Strings object provides helper methods to access the data within this blob, 0xand parse / process it properly according to the standard.

§Examples

use dotscope::metadata::streams::Strings;
let data = &[0u8, b'H', b'e', b'l', b'l', b'o', 0u8];
let strings = Strings::from(data).unwrap();
let s = strings.get(1).unwrap();
assert_eq!(s, "Hello");

§Reference

Implementations§

§

impl<'a> Strings<'a>

pub fn from(data: &[u8]) -> Result<Strings<'_>>

Create a Strings object from a sequence of bytes

§Arguments
  • ‘data’ - The byte slice from which this object shall be created
§Errors

Returns an error if the string heap data is empty or malformed

pub fn get(&self, index: usize) -> Result<&'a str>

Get a view into the string contained at the provided location. This will process the heap information, and return a string slice which represents the object located there (if any)

§Arguments
  • ‘index’ - The offset within the heap to be accessed (comes from metadata tables)
§Errors

Returns an error if the index is out of bounds or the string data is invalid UTF-8

pub fn iter(&self) -> StringsIterator<'_>

Returns an iterator over all strings in the heap

Provides zero-copy sequential access to all null-terminated UTF-8 strings. Each iteration yields a Result<(usize, &str)> with the offset and string content.

§Examples
use dotscope::metadata::streams::Strings;

let data = &[0u8, b'H', b'e', b'l', b'l', b'o', 0u8, b'W', b'o', b'r', b'l', b'd', 0u8];
let strings = Strings::from(data).unwrap();

for result in strings.iter() {
    match result {
        Ok((offset, string)) => println!("String at {}: '{}'", offset, string),
        Err(e) => eprintln!("Error: {}", e),
    }
}

Trait Implementations§

§

impl<'a> IntoIterator for &'a Strings<'a>

§

type Item = Result<(usize, &'a str), Error>

The type of the elements being iterated over.
§

type IntoIter = StringsIterator<'a>

Which kind of iterator are we turning this into?
§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Strings<'a>

§

impl<'a> RefUnwindSafe for Strings<'a>

§

impl<'a> Send for Strings<'a>

§

impl<'a> Sync for Strings<'a>

§

impl<'a> Unpin for Strings<'a>

§

impl<'a> UnwindSafe for Strings<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.