This page hosts a formal specification of mach_o using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
#![allow(unused_imports)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(irrefutable_let_patterns)]
#![allow(unused_comparisons)]
extern crate kaitai;
use kaitai::*;
use std::convert::{TryFrom, TryInto};
use std::cell::{Ref, Cell, RefCell};
use std::rc::{Rc, Weak};
use super::asn1_der::Asn1Der;
/**
* \sa https://www.stonedcoder.org/~kd/lib/MachORuntime.pdf Source
* \sa https://opensource.apple.com/source/python_modules/python_modules-43/Modules/macholib-1.5.1/macholib-1.5.1.tar.gz Source
* \sa https://github.com/comex/cs/blob/07a88f9/macho_cs.py Source
* \sa https://opensource.apple.com/source/Security/Security-55471/libsecurity_codesigning/requirements.grammar.auto.html Source
* \sa https://github.com/apple/darwin-xnu/blob/xnu-2782.40.9/bsd/sys/codesign.h Source
* \sa https://opensource.apple.com/source/dyld/dyld-852/src/ImageLoaderMachO.cpp.auto.html Source
* \sa https://opensource.apple.com/source/dyld/dyld-852/src/ImageLoaderMachOCompressed.cpp.auto.html Source
*/
#[derive(Default, Debug, Clone)]
pub struct MachO {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO>,
pub _self: SharedType<Self>,
magic: RefCell<MachO_MagicType>,
header: RefCell<OptRc<MachO_MachHeader>>,
load_commands: RefCell<Vec<OptRc<MachO_LoadCommand>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO {
type Root = MachO;
type Parent = MachO;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.magic.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
let t = Self::read_into::<_, MachO_MachHeader>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.header.borrow_mut() = t;
*self_rc.load_commands.borrow_mut() = Vec::new();
let l_load_commands = *self_rc.header().ncmds();
for _i in 0..l_load_commands {
let t = Self::read_into::<_, MachO_LoadCommand>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.load_commands.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO {
}
impl MachO {
pub fn magic(&self) -> Ref<'_, MachO_MagicType> {
self.magic.borrow()
}
}
impl MachO {
pub fn header(&self) -> Ref<'_, OptRc<MachO_MachHeader>> {
self.header.borrow()
}
}
impl MachO {
pub fn load_commands(&self) -> Ref<'_, Vec<OptRc<MachO_LoadCommand>>> {
self.load_commands.borrow()
}
}
impl MachO {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CpuType {
Vax,
Romp,
Ns32032,
Ns32332,
I386,
Mips,
Ns32532,
Hppa,
Arm,
Mc88000,
Sparc,
I860,
I860Little,
Rs6000,
Powerpc,
Abi64,
X8664,
Arm64,
Powerpc64,
Any,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CpuType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CpuType> {
match flag {
1 => Ok(MachO_CpuType::Vax),
2 => Ok(MachO_CpuType::Romp),
4 => Ok(MachO_CpuType::Ns32032),
5 => Ok(MachO_CpuType::Ns32332),
7 => Ok(MachO_CpuType::I386),
8 => Ok(MachO_CpuType::Mips),
9 => Ok(MachO_CpuType::Ns32532),
11 => Ok(MachO_CpuType::Hppa),
12 => Ok(MachO_CpuType::Arm),
13 => Ok(MachO_CpuType::Mc88000),
14 => Ok(MachO_CpuType::Sparc),
15 => Ok(MachO_CpuType::I860),
16 => Ok(MachO_CpuType::I860Little),
17 => Ok(MachO_CpuType::Rs6000),
18 => Ok(MachO_CpuType::Powerpc),
16777216 => Ok(MachO_CpuType::Abi64),
16777223 => Ok(MachO_CpuType::X8664),
16777228 => Ok(MachO_CpuType::Arm64),
16777234 => Ok(MachO_CpuType::Powerpc64),
4294967295 => Ok(MachO_CpuType::Any),
_ => Ok(MachO_CpuType::Unknown(flag)),
}
}
}
impl From<&MachO_CpuType> for i64 {
fn from(v: &MachO_CpuType) -> Self {
match *v {
MachO_CpuType::Vax => 1,
MachO_CpuType::Romp => 2,
MachO_CpuType::Ns32032 => 4,
MachO_CpuType::Ns32332 => 5,
MachO_CpuType::I386 => 7,
MachO_CpuType::Mips => 8,
MachO_CpuType::Ns32532 => 9,
MachO_CpuType::Hppa => 11,
MachO_CpuType::Arm => 12,
MachO_CpuType::Mc88000 => 13,
MachO_CpuType::Sparc => 14,
MachO_CpuType::I860 => 15,
MachO_CpuType::I860Little => 16,
MachO_CpuType::Rs6000 => 17,
MachO_CpuType::Powerpc => 18,
MachO_CpuType::Abi64 => 16777216,
MachO_CpuType::X8664 => 16777223,
MachO_CpuType::Arm64 => 16777228,
MachO_CpuType::Powerpc64 => 16777234,
MachO_CpuType::Any => 4294967295,
MachO_CpuType::Unknown(v) => v
}
}
}
impl Default for MachO_CpuType {
fn default() -> Self { MachO_CpuType::Unknown(0) }
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_FileType {
Object,
Execute,
Fvmlib,
Core,
Preload,
Dylib,
Dylinker,
Bundle,
DylibStub,
Dsym,
KextBundle,
Unknown(i64),
}
impl TryFrom<i64> for MachO_FileType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_FileType> {
match flag {
1 => Ok(MachO_FileType::Object),
2 => Ok(MachO_FileType::Execute),
3 => Ok(MachO_FileType::Fvmlib),
4 => Ok(MachO_FileType::Core),
5 => Ok(MachO_FileType::Preload),
6 => Ok(MachO_FileType::Dylib),
7 => Ok(MachO_FileType::Dylinker),
8 => Ok(MachO_FileType::Bundle),
9 => Ok(MachO_FileType::DylibStub),
10 => Ok(MachO_FileType::Dsym),
11 => Ok(MachO_FileType::KextBundle),
_ => Ok(MachO_FileType::Unknown(flag)),
}
}
}
impl From<&MachO_FileType> for i64 {
fn from(v: &MachO_FileType) -> Self {
match *v {
MachO_FileType::Object => 1,
MachO_FileType::Execute => 2,
MachO_FileType::Fvmlib => 3,
MachO_FileType::Core => 4,
MachO_FileType::Preload => 5,
MachO_FileType::Dylib => 6,
MachO_FileType::Dylinker => 7,
MachO_FileType::Bundle => 8,
MachO_FileType::DylibStub => 9,
MachO_FileType::Dsym => 10,
MachO_FileType::KextBundle => 11,
MachO_FileType::Unknown(v) => v
}
}
}
impl Default for MachO_FileType {
fn default() -> Self { MachO_FileType::Unknown(0) }
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_LoadCommandType {
Segment,
Symtab,
Symseg,
Thread,
UnixThread,
LoadFvmLib,
IdFvmLib,
Ident,
FvmFile,
Prepage,
Dysymtab,
LoadDylib,
IdDylib,
LoadDylinker,
IdDylinker,
PreboundDylib,
Routines,
SubFramework,
SubUmbrella,
SubClient,
SubLibrary,
TwolevelHints,
PrebindCksum,
Segment64,
Routines64,
Uuid,
CodeSignature,
SegmentSplitInfo,
LazyLoadDylib,
EncryptionInfo,
DyldInfo,
VersionMinMacosx,
VersionMinIphoneos,
FunctionStarts,
DyldEnvironment,
DataInCode,
SourceVersion,
DylibCodeSignDrs,
EncryptionInfo64,
LinkerOption,
LinkerOptimizationHint,
VersionMinTvos,
VersionMinWatchos,
BuildVersion,
ReqDyld,
LoadWeakDylib,
Rpath,
ReexportDylib,
DyldInfoOnly,
LoadUpwardDylib,
Main,
Unknown(i64),
}
impl TryFrom<i64> for MachO_LoadCommandType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_LoadCommandType> {
match flag {
1 => Ok(MachO_LoadCommandType::Segment),
2 => Ok(MachO_LoadCommandType::Symtab),
3 => Ok(MachO_LoadCommandType::Symseg),
4 => Ok(MachO_LoadCommandType::Thread),
5 => Ok(MachO_LoadCommandType::UnixThread),
6 => Ok(MachO_LoadCommandType::LoadFvmLib),
7 => Ok(MachO_LoadCommandType::IdFvmLib),
8 => Ok(MachO_LoadCommandType::Ident),
9 => Ok(MachO_LoadCommandType::FvmFile),
10 => Ok(MachO_LoadCommandType::Prepage),
11 => Ok(MachO_LoadCommandType::Dysymtab),
12 => Ok(MachO_LoadCommandType::LoadDylib),
13 => Ok(MachO_LoadCommandType::IdDylib),
14 => Ok(MachO_LoadCommandType::LoadDylinker),
15 => Ok(MachO_LoadCommandType::IdDylinker),
16 => Ok(MachO_LoadCommandType::PreboundDylib),
17 => Ok(MachO_LoadCommandType::Routines),
18 => Ok(MachO_LoadCommandType::SubFramework),
19 => Ok(MachO_LoadCommandType::SubUmbrella),
20 => Ok(MachO_LoadCommandType::SubClient),
21 => Ok(MachO_LoadCommandType::SubLibrary),
22 => Ok(MachO_LoadCommandType::TwolevelHints),
23 => Ok(MachO_LoadCommandType::PrebindCksum),
25 => Ok(MachO_LoadCommandType::Segment64),
26 => Ok(MachO_LoadCommandType::Routines64),
27 => Ok(MachO_LoadCommandType::Uuid),
29 => Ok(MachO_LoadCommandType::CodeSignature),
30 => Ok(MachO_LoadCommandType::SegmentSplitInfo),
32 => Ok(MachO_LoadCommandType::LazyLoadDylib),
33 => Ok(MachO_LoadCommandType::EncryptionInfo),
34 => Ok(MachO_LoadCommandType::DyldInfo),
36 => Ok(MachO_LoadCommandType::VersionMinMacosx),
37 => Ok(MachO_LoadCommandType::VersionMinIphoneos),
38 => Ok(MachO_LoadCommandType::FunctionStarts),
39 => Ok(MachO_LoadCommandType::DyldEnvironment),
41 => Ok(MachO_LoadCommandType::DataInCode),
42 => Ok(MachO_LoadCommandType::SourceVersion),
43 => Ok(MachO_LoadCommandType::DylibCodeSignDrs),
44 => Ok(MachO_LoadCommandType::EncryptionInfo64),
45 => Ok(MachO_LoadCommandType::LinkerOption),
46 => Ok(MachO_LoadCommandType::LinkerOptimizationHint),
47 => Ok(MachO_LoadCommandType::VersionMinTvos),
48 => Ok(MachO_LoadCommandType::VersionMinWatchos),
50 => Ok(MachO_LoadCommandType::BuildVersion),
2147483648 => Ok(MachO_LoadCommandType::ReqDyld),
2147483672 => Ok(MachO_LoadCommandType::LoadWeakDylib),
2147483676 => Ok(MachO_LoadCommandType::Rpath),
2147483679 => Ok(MachO_LoadCommandType::ReexportDylib),
2147483682 => Ok(MachO_LoadCommandType::DyldInfoOnly),
2147483683 => Ok(MachO_LoadCommandType::LoadUpwardDylib),
2147483688 => Ok(MachO_LoadCommandType::Main),
_ => Ok(MachO_LoadCommandType::Unknown(flag)),
}
}
}
impl From<&MachO_LoadCommandType> for i64 {
fn from(v: &MachO_LoadCommandType) -> Self {
match *v {
MachO_LoadCommandType::Segment => 1,
MachO_LoadCommandType::Symtab => 2,
MachO_LoadCommandType::Symseg => 3,
MachO_LoadCommandType::Thread => 4,
MachO_LoadCommandType::UnixThread => 5,
MachO_LoadCommandType::LoadFvmLib => 6,
MachO_LoadCommandType::IdFvmLib => 7,
MachO_LoadCommandType::Ident => 8,
MachO_LoadCommandType::FvmFile => 9,
MachO_LoadCommandType::Prepage => 10,
MachO_LoadCommandType::Dysymtab => 11,
MachO_LoadCommandType::LoadDylib => 12,
MachO_LoadCommandType::IdDylib => 13,
MachO_LoadCommandType::LoadDylinker => 14,
MachO_LoadCommandType::IdDylinker => 15,
MachO_LoadCommandType::PreboundDylib => 16,
MachO_LoadCommandType::Routines => 17,
MachO_LoadCommandType::SubFramework => 18,
MachO_LoadCommandType::SubUmbrella => 19,
MachO_LoadCommandType::SubClient => 20,
MachO_LoadCommandType::SubLibrary => 21,
MachO_LoadCommandType::TwolevelHints => 22,
MachO_LoadCommandType::PrebindCksum => 23,
MachO_LoadCommandType::Segment64 => 25,
MachO_LoadCommandType::Routines64 => 26,
MachO_LoadCommandType::Uuid => 27,
MachO_LoadCommandType::CodeSignature => 29,
MachO_LoadCommandType::SegmentSplitInfo => 30,
MachO_LoadCommandType::LazyLoadDylib => 32,
MachO_LoadCommandType::EncryptionInfo => 33,
MachO_LoadCommandType::DyldInfo => 34,
MachO_LoadCommandType::VersionMinMacosx => 36,
MachO_LoadCommandType::VersionMinIphoneos => 37,
MachO_LoadCommandType::FunctionStarts => 38,
MachO_LoadCommandType::DyldEnvironment => 39,
MachO_LoadCommandType::DataInCode => 41,
MachO_LoadCommandType::SourceVersion => 42,
MachO_LoadCommandType::DylibCodeSignDrs => 43,
MachO_LoadCommandType::EncryptionInfo64 => 44,
MachO_LoadCommandType::LinkerOption => 45,
MachO_LoadCommandType::LinkerOptimizationHint => 46,
MachO_LoadCommandType::VersionMinTvos => 47,
MachO_LoadCommandType::VersionMinWatchos => 48,
MachO_LoadCommandType::BuildVersion => 50,
MachO_LoadCommandType::ReqDyld => 2147483648,
MachO_LoadCommandType::LoadWeakDylib => 2147483672,
MachO_LoadCommandType::Rpath => 2147483676,
MachO_LoadCommandType::ReexportDylib => 2147483679,
MachO_LoadCommandType::DyldInfoOnly => 2147483682,
MachO_LoadCommandType::LoadUpwardDylib => 2147483683,
MachO_LoadCommandType::Main => 2147483688,
MachO_LoadCommandType::Unknown(v) => v
}
}
}
impl Default for MachO_LoadCommandType {
fn default() -> Self { MachO_LoadCommandType::Unknown(0) }
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_MagicType {
MachoLeX86,
MachoLeX64,
MachoBeX86,
MachoBeX64,
Unknown(i64),
}
impl TryFrom<i64> for MachO_MagicType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_MagicType> {
match flag {
3472551422 => Ok(MachO_MagicType::MachoLeX86),
3489328638 => Ok(MachO_MagicType::MachoLeX64),
4277009102 => Ok(MachO_MagicType::MachoBeX86),
4277009103 => Ok(MachO_MagicType::MachoBeX64),
_ => Ok(MachO_MagicType::Unknown(flag)),
}
}
}
impl From<&MachO_MagicType> for i64 {
fn from(v: &MachO_MagicType) -> Self {
match *v {
MachO_MagicType::MachoLeX86 => 3472551422,
MachO_MagicType::MachoLeX64 => 3489328638,
MachO_MagicType::MachoBeX86 => 4277009102,
MachO_MagicType::MachoBeX64 => 4277009103,
MachO_MagicType::Unknown(v) => v
}
}
}
impl Default for MachO_MagicType {
fn default() -> Self { MachO_MagicType::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_BuildVersionCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
platform: RefCell<u32>,
minos: RefCell<u32>,
sdk: RefCell<u32>,
ntools: RefCell<u32>,
tools: RefCell<Vec<OptRc<MachO_BuildVersionCommand_BuildToolVersion>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_BuildVersionCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.platform.borrow_mut() = _io.read_u4le()?.into();
*self_rc.minos.borrow_mut() = _io.read_u4le()?.into();
*self_rc.sdk.borrow_mut() = _io.read_u4le()?.into();
*self_rc.ntools.borrow_mut() = _io.read_u4le()?.into();
*self_rc.tools.borrow_mut() = Vec::new();
let l_tools = *self_rc.ntools();
for _i in 0..l_tools {
let t = Self::read_into::<_, MachO_BuildVersionCommand_BuildToolVersion>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.tools.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO_BuildVersionCommand {
}
impl MachO_BuildVersionCommand {
pub fn platform(&self) -> Ref<'_, u32> {
self.platform.borrow()
}
}
impl MachO_BuildVersionCommand {
pub fn minos(&self) -> Ref<'_, u32> {
self.minos.borrow()
}
}
impl MachO_BuildVersionCommand {
pub fn sdk(&self) -> Ref<'_, u32> {
self.sdk.borrow()
}
}
impl MachO_BuildVersionCommand {
pub fn ntools(&self) -> Ref<'_, u32> {
self.ntools.borrow()
}
}
impl MachO_BuildVersionCommand {
pub fn tools(&self) -> Ref<'_, Vec<OptRc<MachO_BuildVersionCommand_BuildToolVersion>>> {
self.tools.borrow()
}
}
impl MachO_BuildVersionCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_BuildVersionCommand_BuildToolVersion {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_BuildVersionCommand>,
pub _self: SharedType<Self>,
tool: RefCell<u32>,
version: RefCell<u32>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_BuildVersionCommand_BuildToolVersion {
type Root = MachO;
type Parent = MachO_BuildVersionCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.tool.borrow_mut() = _io.read_u4le()?.into();
*self_rc.version.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_BuildVersionCommand_BuildToolVersion {
}
impl MachO_BuildVersionCommand_BuildToolVersion {
pub fn tool(&self) -> Ref<'_, u32> {
self.tool.borrow()
}
}
impl MachO_BuildVersionCommand_BuildToolVersion {
pub fn version(&self) -> Ref<'_, u32> {
self.version.borrow()
}
}
impl MachO_BuildVersionCommand_BuildToolVersion {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CodeSignatureCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
data_off: RefCell<u32>,
data_size: RefCell<u32>,
_io: RefCell<BytesReader>,
code_signature_raw: RefCell<Vec<u8>>,
f_code_signature: Cell<bool>,
code_signature: RefCell<OptRc<MachO_CsBlob>>,
}
impl KStruct for MachO_CodeSignatureCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.data_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.data_size.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_CodeSignatureCommand {
pub fn code_signature(
&self
) -> KResult<Ref<'_, OptRc<MachO_CsBlob>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_code_signature.get() {
return Ok(self.code_signature.borrow());
}
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.data_off() as usize)?;
*self.code_signature_raw.borrow_mut() = io.read_bytes(*self.data_size() as usize)?.into();
let code_signature_raw = self.code_signature_raw.borrow();
let _t_code_signature_raw_io = BytesReader::from(code_signature_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob>(&_t_code_signature_raw_io, Some(self._root.clone()), None)?.into();
*self.code_signature.borrow_mut() = t;
io.seek(_pos)?;
Ok(self.code_signature.borrow())
}
}
impl MachO_CodeSignatureCommand {
pub fn data_off(&self) -> Ref<'_, u32> {
self.data_off.borrow()
}
}
impl MachO_CodeSignatureCommand {
pub fn data_size(&self) -> Ref<'_, u32> {
self.data_size.borrow()
}
}
impl MachO_CodeSignatureCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_CodeSignatureCommand {
pub fn code_signature_raw(&self) -> Ref<'_, Vec<u8>> {
self.code_signature_raw.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
magic: RefCell<MachO_CsBlob_CsMagic>,
length: RefCell<u32>,
body: RefCell<Option<MachO_CsBlob_Body>>,
_io: RefCell<BytesReader>,
body_raw: RefCell<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub enum MachO_CsBlob_Body {
MachO_CsBlob_Requirements(OptRc<MachO_CsBlob_Requirements>),
Bytes(Vec<u8>),
MachO_CsBlob_SuperBlob(OptRc<MachO_CsBlob_SuperBlob>),
MachO_CsBlob_BlobWrapper(OptRc<MachO_CsBlob_BlobWrapper>),
MachO_CsBlob_Entitlements(OptRc<MachO_CsBlob_Entitlements>),
MachO_CsBlob_Requirement(OptRc<MachO_CsBlob_Requirement>),
MachO_CsBlob_CodeDirectory(OptRc<MachO_CsBlob_CodeDirectory>),
Asn1Der(OptRc<Asn1Der>),
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_Requirements> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_Requirements(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_Requirements, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Requirements>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_Requirements>) -> Self {
Self::MachO_CsBlob_Requirements(v)
}
}
impl From<&MachO_CsBlob_Body> for Vec<u8> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::Bytes(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::Bytes, got {:?}", v)
}
}
impl From<Vec<u8>> for MachO_CsBlob_Body {
fn from(v: Vec<u8>) -> Self {
Self::Bytes(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_SuperBlob> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_SuperBlob(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_SuperBlob, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_SuperBlob>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_SuperBlob>) -> Self {
Self::MachO_CsBlob_SuperBlob(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_BlobWrapper> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_BlobWrapper(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_BlobWrapper, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_BlobWrapper>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_BlobWrapper>) -> Self {
Self::MachO_CsBlob_BlobWrapper(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_Entitlements> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_Entitlements(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_Entitlements, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Entitlements>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_Entitlements>) -> Self {
Self::MachO_CsBlob_Entitlements(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_Requirement> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_Requirement(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_Requirement, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Requirement>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_Requirement>) -> Self {
Self::MachO_CsBlob_Requirement(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<MachO_CsBlob_CodeDirectory> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::MachO_CsBlob_CodeDirectory(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::MachO_CsBlob_CodeDirectory, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_CodeDirectory>> for MachO_CsBlob_Body {
fn from(v: OptRc<MachO_CsBlob_CodeDirectory>) -> Self {
Self::MachO_CsBlob_CodeDirectory(v)
}
}
impl From<&MachO_CsBlob_Body> for OptRc<Asn1Der> {
fn from(v: &MachO_CsBlob_Body) -> Self {
if let MachO_CsBlob_Body::Asn1Der(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Body::Asn1Der, got {:?}", v)
}
}
impl From<OptRc<Asn1Der>> for MachO_CsBlob_Body {
fn from(v: OptRc<Asn1Der>) -> Self {
Self::Asn1Der(v)
}
}
impl KStruct for MachO_CsBlob {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.magic.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
*self_rc.length.borrow_mut() = _io.read_u4be()?.into();
match *self_rc.magic() {
MachO_CsBlob_CsMagic::BlobWrapper => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_BlobWrapper>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::CodeDirectory => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_CodeDirectory>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::DerEntitlements => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, Asn1Der>(&_t_body_raw_io, None, None)?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::DetachedSignature => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_SuperBlob>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::EmbeddedSignature => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_SuperBlob>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::Entitlements => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_Entitlements>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::Requirement => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_Requirement>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_CsBlob_CsMagic::Requirements => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob_Requirements>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
_ => {
*self_rc.body.borrow_mut() = Some(_io.read_bytes(((*self_rc.length() as u32) - (8 as u32)) as usize)?.into());
}
}
Ok(())
}
}
impl MachO_CsBlob {
}
impl MachO_CsBlob {
pub fn magic(&self) -> Ref<'_, MachO_CsBlob_CsMagic> {
self.magic.borrow()
}
}
impl MachO_CsBlob {
pub fn length(&self) -> Ref<'_, u32> {
self.length.borrow()
}
}
impl MachO_CsBlob {
pub fn body(&self) -> Ref<'_, Option<MachO_CsBlob_Body>> {
self.body.borrow()
}
}
impl MachO_CsBlob {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_CsBlob {
pub fn body_raw(&self) -> Ref<'_, Vec<u8>> {
self.body_raw.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_CsMagic {
BlobWrapper,
Requirement,
Requirements,
CodeDirectory,
EmbeddedSignature,
DetachedSignature,
Entitlements,
DerEntitlements,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_CsMagic {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_CsMagic> {
match flag {
4208855809 => Ok(MachO_CsBlob_CsMagic::BlobWrapper),
4208856064 => Ok(MachO_CsBlob_CsMagic::Requirement),
4208856065 => Ok(MachO_CsBlob_CsMagic::Requirements),
4208856066 => Ok(MachO_CsBlob_CsMagic::CodeDirectory),
4208856256 => Ok(MachO_CsBlob_CsMagic::EmbeddedSignature),
4208856257 => Ok(MachO_CsBlob_CsMagic::DetachedSignature),
4208882033 => Ok(MachO_CsBlob_CsMagic::Entitlements),
4208882034 => Ok(MachO_CsBlob_CsMagic::DerEntitlements),
_ => Ok(MachO_CsBlob_CsMagic::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_CsMagic> for i64 {
fn from(v: &MachO_CsBlob_CsMagic) -> Self {
match *v {
MachO_CsBlob_CsMagic::BlobWrapper => 4208855809,
MachO_CsBlob_CsMagic::Requirement => 4208856064,
MachO_CsBlob_CsMagic::Requirements => 4208856065,
MachO_CsBlob_CsMagic::CodeDirectory => 4208856066,
MachO_CsBlob_CsMagic::EmbeddedSignature => 4208856256,
MachO_CsBlob_CsMagic::DetachedSignature => 4208856257,
MachO_CsBlob_CsMagic::Entitlements => 4208882033,
MachO_CsBlob_CsMagic::DerEntitlements => 4208882034,
MachO_CsBlob_CsMagic::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_CsMagic {
fn default() -> Self { MachO_CsBlob_CsMagic::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_BlobIndex {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_SuperBlob>,
pub _self: SharedType<Self>,
type: RefCell<MachO_CsBlob_BlobIndex_CsslotType>,
offset: RefCell<u32>,
_io: RefCell<BytesReader>,
blob_raw: RefCell<Vec<u8>>,
f_blob: Cell<bool>,
blob: RefCell<OptRc<MachO_CsBlob>>,
}
impl KStruct for MachO_CsBlob_BlobIndex {
type Root = MachO;
type Parent = MachO_CsBlob_SuperBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.type.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
*self_rc.offset.borrow_mut() = _io.read_u4be()?.into();
Ok(())
}
}
impl MachO_CsBlob_BlobIndex {
pub fn blob(
&self
) -> KResult<Ref<'_, OptRc<MachO_CsBlob>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_blob.get() {
return Ok(self.blob.borrow());
}
let io = Clone::clone(&*_prc.as_ref().unwrap()._io());
let _pos = io.pos();
io.seek(((*self.offset() as u32) - (8 as u32)) as usize)?;
*self.blob_raw.borrow_mut() = io.read_bytes_full()?.into();
let blob_raw = self.blob_raw.borrow();
let _t_blob_raw_io = BytesReader::from(blob_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CsBlob>(&_t_blob_raw_io, Some(self._root.clone()), None)?.into();
*self.blob.borrow_mut() = t;
io.seek(_pos)?;
Ok(self.blob.borrow())
}
}
impl MachO_CsBlob_BlobIndex {
pub fn type(&self) -> Ref<'_, MachO_CsBlob_BlobIndex_CsslotType> {
self.type.borrow()
}
}
impl MachO_CsBlob_BlobIndex {
pub fn offset(&self) -> Ref<'_, u32> {
self.offset.borrow()
}
}
impl MachO_CsBlob_BlobIndex {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_CsBlob_BlobIndex {
pub fn blob_raw(&self) -> Ref<'_, Vec<u8>> {
self.blob_raw.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_BlobIndex_CsslotType {
CodeDirectory,
InfoSlot,
Requirements,
ResourceDir,
Application,
Entitlements,
DerEntitlements,
AlternateCodeDirectories,
SignatureSlot,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_BlobIndex_CsslotType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_BlobIndex_CsslotType> {
match flag {
0 => Ok(MachO_CsBlob_BlobIndex_CsslotType::CodeDirectory),
1 => Ok(MachO_CsBlob_BlobIndex_CsslotType::InfoSlot),
2 => Ok(MachO_CsBlob_BlobIndex_CsslotType::Requirements),
3 => Ok(MachO_CsBlob_BlobIndex_CsslotType::ResourceDir),
4 => Ok(MachO_CsBlob_BlobIndex_CsslotType::Application),
5 => Ok(MachO_CsBlob_BlobIndex_CsslotType::Entitlements),
7 => Ok(MachO_CsBlob_BlobIndex_CsslotType::DerEntitlements),
4096 => Ok(MachO_CsBlob_BlobIndex_CsslotType::AlternateCodeDirectories),
65536 => Ok(MachO_CsBlob_BlobIndex_CsslotType::SignatureSlot),
_ => Ok(MachO_CsBlob_BlobIndex_CsslotType::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_BlobIndex_CsslotType> for i64 {
fn from(v: &MachO_CsBlob_BlobIndex_CsslotType) -> Self {
match *v {
MachO_CsBlob_BlobIndex_CsslotType::CodeDirectory => 0,
MachO_CsBlob_BlobIndex_CsslotType::InfoSlot => 1,
MachO_CsBlob_BlobIndex_CsslotType::Requirements => 2,
MachO_CsBlob_BlobIndex_CsslotType::ResourceDir => 3,
MachO_CsBlob_BlobIndex_CsslotType::Application => 4,
MachO_CsBlob_BlobIndex_CsslotType::Entitlements => 5,
MachO_CsBlob_BlobIndex_CsslotType::DerEntitlements => 7,
MachO_CsBlob_BlobIndex_CsslotType::AlternateCodeDirectories => 4096,
MachO_CsBlob_BlobIndex_CsslotType::SignatureSlot => 65536,
MachO_CsBlob_BlobIndex_CsslotType::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_BlobIndex_CsslotType {
fn default() -> Self { MachO_CsBlob_BlobIndex_CsslotType::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_BlobWrapper {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
data: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_BlobWrapper {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.data.borrow_mut() = _io.read_bytes_full()?.into();
Ok(())
}
}
impl MachO_CsBlob_BlobWrapper {
}
impl MachO_CsBlob_BlobWrapper {
pub fn data(&self) -> Ref<'_, Vec<u8>> {
self.data.borrow()
}
}
impl MachO_CsBlob_BlobWrapper {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_CodeDirectory {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
version: RefCell<u32>,
flags: RefCell<u32>,
hash_offset: RefCell<u32>,
ident_offset: RefCell<u32>,
n_special_slots: RefCell<u32>,
n_code_slots: RefCell<u32>,
code_limit: RefCell<u32>,
hash_size: RefCell<u8>,
hash_type: RefCell<u8>,
spare1: RefCell<u8>,
page_size: RefCell<u8>,
spare2: RefCell<u32>,
scatter_offset: RefCell<u32>,
team_id_offset: RefCell<u32>,
_io: RefCell<BytesReader>,
f_hashes: Cell<bool>,
hashes: RefCell<Vec<Vec<u8>>>,
f_ident: Cell<bool>,
ident: RefCell<String>,
f_team_id: Cell<bool>,
team_id: RefCell<String>,
}
impl KStruct for MachO_CsBlob_CodeDirectory {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.version.borrow_mut() = _io.read_u4be()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4be()?.into();
*self_rc.hash_offset.borrow_mut() = _io.read_u4be()?.into();
*self_rc.ident_offset.borrow_mut() = _io.read_u4be()?.into();
*self_rc.n_special_slots.borrow_mut() = _io.read_u4be()?.into();
*self_rc.n_code_slots.borrow_mut() = _io.read_u4be()?.into();
*self_rc.code_limit.borrow_mut() = _io.read_u4be()?.into();
*self_rc.hash_size.borrow_mut() = _io.read_u1()?.into();
*self_rc.hash_type.borrow_mut() = _io.read_u1()?.into();
*self_rc.spare1.borrow_mut() = _io.read_u1()?.into();
*self_rc.page_size.borrow_mut() = _io.read_u1()?.into();
*self_rc.spare2.borrow_mut() = _io.read_u4be()?.into();
if ((*self_rc.version() as i32) >= (131328 as i32)) {
*self_rc.scatter_offset.borrow_mut() = _io.read_u4be()?.into();
}
if ((*self_rc.version() as i32) >= (131584 as i32)) {
*self_rc.team_id_offset.borrow_mut() = _io.read_u4be()?.into();
}
Ok(())
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn hashes(
&self
) -> KResult<Ref<'_, Vec<Vec<u8>>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_hashes.get() {
return Ok(self.hashes.borrow());
}
self.f_hashes.set(true);
let _pos = _io.pos();
_io.seek(((((*self.hash_offset() as u32) - (8 as u32)) as i32) - (((*self.hash_size() as u32) * (*self.n_special_slots() as u32)) as i32)) as usize)?;
*self.hashes.borrow_mut() = Vec::new();
let l_hashes = ((*self.n_special_slots() as u32) + (*self.n_code_slots() as u32));
for _i in 0..l_hashes {
self.hashes.borrow_mut().push(_io.read_bytes(*self.hash_size() as usize)?.into());
}
_io.seek(_pos)?;
Ok(self.hashes.borrow())
}
pub fn ident(
&self
) -> KResult<Ref<'_, String>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_ident.get() {
return Ok(self.ident.borrow());
}
self.f_ident.set(true);
let _pos = _io.pos();
_io.seek(((*self.ident_offset() as u32) - (8 as u32)) as usize)?;
*self.ident.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
_io.seek(_pos)?;
Ok(self.ident.borrow())
}
pub fn team_id(
&self
) -> KResult<Ref<'_, String>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_team_id.get() {
return Ok(self.team_id.borrow());
}
self.f_team_id.set(true);
let _pos = _io.pos();
_io.seek(((*self.team_id_offset() as u32) - (8 as u32)) as usize)?;
*self.team_id.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
_io.seek(_pos)?;
Ok(self.team_id.borrow())
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn version(&self) -> Ref<'_, u32> {
self.version.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn hash_offset(&self) -> Ref<'_, u32> {
self.hash_offset.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn ident_offset(&self) -> Ref<'_, u32> {
self.ident_offset.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn n_special_slots(&self) -> Ref<'_, u32> {
self.n_special_slots.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn n_code_slots(&self) -> Ref<'_, u32> {
self.n_code_slots.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn code_limit(&self) -> Ref<'_, u32> {
self.code_limit.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn hash_size(&self) -> Ref<'_, u8> {
self.hash_size.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn hash_type(&self) -> Ref<'_, u8> {
self.hash_type.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn spare1(&self) -> Ref<'_, u8> {
self.spare1.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn page_size(&self) -> Ref<'_, u8> {
self.page_size.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn spare2(&self) -> Ref<'_, u32> {
self.spare2.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn scatter_offset(&self) -> Ref<'_, u32> {
self.scatter_offset.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn team_id_offset(&self) -> Ref<'_, u32> {
self.team_id_offset.borrow()
}
}
impl MachO_CsBlob_CodeDirectory {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Data {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
length: RefCell<u32>,
value: RefCell<Vec<u8>>,
padding: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Data {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.length.borrow_mut() = _io.read_u4be()?.into();
*self_rc.value.borrow_mut() = _io.read_bytes(*self_rc.length() as usize)?.into();
*self_rc.padding.borrow_mut() = _io.read_bytes(modulo(-(*self_rc.length()) as i64, 4 as i64) as usize)?.into();
Ok(())
}
}
impl MachO_CsBlob_Data {
}
impl MachO_CsBlob_Data {
pub fn length(&self) -> Ref<'_, u32> {
self.length.borrow()
}
}
impl MachO_CsBlob_Data {
pub fn value(&self) -> Ref<'_, Vec<u8>> {
self.value.borrow()
}
}
impl MachO_CsBlob_Data {
pub fn padding(&self) -> Ref<'_, Vec<u8>> {
self.padding.borrow()
}
}
impl MachO_CsBlob_Data {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Entitlements {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
data: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Entitlements {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.data.borrow_mut() = _io.read_bytes_full()?.into();
Ok(())
}
}
impl MachO_CsBlob_Entitlements {
}
impl MachO_CsBlob_Entitlements {
pub fn data(&self) -> Ref<'_, Vec<u8>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Entitlements {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
op: RefCell<MachO_CsBlob_Expr_OpEnum>,
data: RefCell<Option<MachO_CsBlob_Expr_Data>>,
_io: RefCell<BytesReader>,
}
#[derive(Debug, Clone)]
pub enum MachO_CsBlob_Expr_Data {
MachO_CsBlob_Expr_OrExpr(OptRc<MachO_CsBlob_Expr_OrExpr>),
MachO_CsBlob_Expr_EntitlementFieldExpr(OptRc<MachO_CsBlob_Expr_EntitlementFieldExpr>),
MachO_CsBlob_Expr_AndExpr(OptRc<MachO_CsBlob_Expr_AndExpr>),
MachO_CsBlob_Expr_CertFieldExpr(OptRc<MachO_CsBlob_Expr_CertFieldExpr>),
MachO_CsBlob_Expr_CertSlotExpr(OptRc<MachO_CsBlob_Expr_CertSlotExpr>),
MachO_CsBlob_Expr_IdentExpr(OptRc<MachO_CsBlob_Expr_IdentExpr>),
MachO_CsBlob_Expr_AppleGenericAnchorExpr(OptRc<MachO_CsBlob_Expr_AppleGenericAnchorExpr>),
MachO_CsBlob_Expr_InfoKeyFieldExpr(OptRc<MachO_CsBlob_Expr_InfoKeyFieldExpr>),
MachO_CsBlob_Expr(OptRc<MachO_CsBlob_Expr>),
MachO_CsBlob_Expr_AnchorHashExpr(OptRc<MachO_CsBlob_Expr_AnchorHashExpr>),
MachO_CsBlob_Data(OptRc<MachO_CsBlob_Data>),
MachO_CsBlob_Expr_CertGenericExpr(OptRc<MachO_CsBlob_Expr_CertGenericExpr>),
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_OrExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_OrExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_OrExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_OrExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_OrExpr>) -> Self {
Self::MachO_CsBlob_Expr_OrExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_EntitlementFieldExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_EntitlementFieldExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_EntitlementFieldExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_EntitlementFieldExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_EntitlementFieldExpr>) -> Self {
Self::MachO_CsBlob_Expr_EntitlementFieldExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_AndExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AndExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AndExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_AndExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_AndExpr>) -> Self {
Self::MachO_CsBlob_Expr_AndExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_CertFieldExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertFieldExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertFieldExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_CertFieldExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_CertFieldExpr>) -> Self {
Self::MachO_CsBlob_Expr_CertFieldExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_CertSlotExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertSlotExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertSlotExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_CertSlotExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_CertSlotExpr>) -> Self {
Self::MachO_CsBlob_Expr_CertSlotExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_IdentExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_IdentExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_IdentExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_IdentExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_IdentExpr>) -> Self {
Self::MachO_CsBlob_Expr_IdentExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_AppleGenericAnchorExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AppleGenericAnchorExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AppleGenericAnchorExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_AppleGenericAnchorExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_AppleGenericAnchorExpr>) -> Self {
Self::MachO_CsBlob_Expr_AppleGenericAnchorExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_InfoKeyFieldExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_InfoKeyFieldExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_InfoKeyFieldExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_InfoKeyFieldExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_InfoKeyFieldExpr>) -> Self {
Self::MachO_CsBlob_Expr_InfoKeyFieldExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr>) -> Self {
Self::MachO_CsBlob_Expr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_AnchorHashExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AnchorHashExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_AnchorHashExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_AnchorHashExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_AnchorHashExpr>) -> Self {
Self::MachO_CsBlob_Expr_AnchorHashExpr(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Data> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Data(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Data, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Data>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Data>) -> Self {
Self::MachO_CsBlob_Data(v)
}
}
impl From<&MachO_CsBlob_Expr_Data> for OptRc<MachO_CsBlob_Expr_CertGenericExpr> {
fn from(v: &MachO_CsBlob_Expr_Data) -> Self {
if let MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertGenericExpr(x) = v {
return x.clone();
}
panic!("expected MachO_CsBlob_Expr_Data::MachO_CsBlob_Expr_CertGenericExpr, got {:?}", v)
}
}
impl From<OptRc<MachO_CsBlob_Expr_CertGenericExpr>> for MachO_CsBlob_Expr_Data {
fn from(v: OptRc<MachO_CsBlob_Expr_CertGenericExpr>) -> Self {
Self::MachO_CsBlob_Expr_CertGenericExpr(v)
}
}
impl KStruct for MachO_CsBlob_Expr {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.op.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
match *self_rc.op() {
MachO_CsBlob_Expr_OpEnum::AnchorHash => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_AnchorHashExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::AndOp => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_AndExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::AppleGenericAnchor => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_AppleGenericAnchorExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::CdHash => {
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::CertField => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_CertFieldExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::CertGeneric => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_CertGenericExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::EntitlementField => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_EntitlementFieldExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::Ident => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_IdentExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::InfoKeyField => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_InfoKeyFieldExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::InfoKeyValue => {
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::NotOp => {
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::OrOp => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_OrExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
MachO_CsBlob_Expr_OpEnum::TrustedCert => {
let t = Self::read_into::<_, MachO_CsBlob_Expr_CertSlotExpr>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.data.borrow_mut() = Some(t);
}
_ => {}
}
Ok(())
}
}
impl MachO_CsBlob_Expr {
}
impl MachO_CsBlob_Expr {
pub fn op(&self) -> Ref<'_, MachO_CsBlob_Expr_OpEnum> {
self.op.borrow()
}
}
impl MachO_CsBlob_Expr {
pub fn data(&self) -> Ref<'_, Option<MachO_CsBlob_Expr_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_Expr_CertSlot {
LeftCert,
AnchorCert,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_Expr_CertSlot {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_Expr_CertSlot> {
match flag {
0 => Ok(MachO_CsBlob_Expr_CertSlot::LeftCert),
4294967295 => Ok(MachO_CsBlob_Expr_CertSlot::AnchorCert),
_ => Ok(MachO_CsBlob_Expr_CertSlot::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_Expr_CertSlot> for i64 {
fn from(v: &MachO_CsBlob_Expr_CertSlot) -> Self {
match *v {
MachO_CsBlob_Expr_CertSlot::LeftCert => 0,
MachO_CsBlob_Expr_CertSlot::AnchorCert => 4294967295,
MachO_CsBlob_Expr_CertSlot::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_Expr_CertSlot {
fn default() -> Self { MachO_CsBlob_Expr_CertSlot::Unknown(0) }
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_Expr_OpEnum {
False,
True,
Ident,
AppleAnchor,
AnchorHash,
InfoKeyValue,
AndOp,
OrOp,
CdHash,
NotOp,
InfoKeyField,
CertField,
TrustedCert,
TrustedCerts,
CertGeneric,
AppleGenericAnchor,
EntitlementField,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_Expr_OpEnum {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_Expr_OpEnum> {
match flag {
0 => Ok(MachO_CsBlob_Expr_OpEnum::False),
1 => Ok(MachO_CsBlob_Expr_OpEnum::True),
2 => Ok(MachO_CsBlob_Expr_OpEnum::Ident),
3 => Ok(MachO_CsBlob_Expr_OpEnum::AppleAnchor),
4 => Ok(MachO_CsBlob_Expr_OpEnum::AnchorHash),
5 => Ok(MachO_CsBlob_Expr_OpEnum::InfoKeyValue),
6 => Ok(MachO_CsBlob_Expr_OpEnum::AndOp),
7 => Ok(MachO_CsBlob_Expr_OpEnum::OrOp),
8 => Ok(MachO_CsBlob_Expr_OpEnum::CdHash),
9 => Ok(MachO_CsBlob_Expr_OpEnum::NotOp),
10 => Ok(MachO_CsBlob_Expr_OpEnum::InfoKeyField),
11 => Ok(MachO_CsBlob_Expr_OpEnum::CertField),
12 => Ok(MachO_CsBlob_Expr_OpEnum::TrustedCert),
13 => Ok(MachO_CsBlob_Expr_OpEnum::TrustedCerts),
14 => Ok(MachO_CsBlob_Expr_OpEnum::CertGeneric),
15 => Ok(MachO_CsBlob_Expr_OpEnum::AppleGenericAnchor),
16 => Ok(MachO_CsBlob_Expr_OpEnum::EntitlementField),
_ => Ok(MachO_CsBlob_Expr_OpEnum::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_Expr_OpEnum> for i64 {
fn from(v: &MachO_CsBlob_Expr_OpEnum) -> Self {
match *v {
MachO_CsBlob_Expr_OpEnum::False => 0,
MachO_CsBlob_Expr_OpEnum::True => 1,
MachO_CsBlob_Expr_OpEnum::Ident => 2,
MachO_CsBlob_Expr_OpEnum::AppleAnchor => 3,
MachO_CsBlob_Expr_OpEnum::AnchorHash => 4,
MachO_CsBlob_Expr_OpEnum::InfoKeyValue => 5,
MachO_CsBlob_Expr_OpEnum::AndOp => 6,
MachO_CsBlob_Expr_OpEnum::OrOp => 7,
MachO_CsBlob_Expr_OpEnum::CdHash => 8,
MachO_CsBlob_Expr_OpEnum::NotOp => 9,
MachO_CsBlob_Expr_OpEnum::InfoKeyField => 10,
MachO_CsBlob_Expr_OpEnum::CertField => 11,
MachO_CsBlob_Expr_OpEnum::TrustedCert => 12,
MachO_CsBlob_Expr_OpEnum::TrustedCerts => 13,
MachO_CsBlob_Expr_OpEnum::CertGeneric => 14,
MachO_CsBlob_Expr_OpEnum::AppleGenericAnchor => 15,
MachO_CsBlob_Expr_OpEnum::EntitlementField => 16,
MachO_CsBlob_Expr_OpEnum::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_Expr_OpEnum {
fn default() -> Self { MachO_CsBlob_Expr_OpEnum::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_AnchorHashExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
cert_slot: RefCell<MachO_CsBlob_Expr_CertSlot>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_AnchorHashExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.cert_slot.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = Some(t);
Ok(())
}
}
impl MachO_CsBlob_Expr_AnchorHashExpr {
}
impl MachO_CsBlob_Expr_AnchorHashExpr {
pub fn cert_slot(&self) -> Ref<'_, MachO_CsBlob_Expr_CertSlot> {
self.cert_slot.borrow()
}
}
impl MachO_CsBlob_Expr_AnchorHashExpr {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr_AnchorHashExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_AndExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
left: RefCell<OptRc<MachO_CsBlob_Expr>>,
right: RefCell<OptRc<MachO_CsBlob_Expr>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_AndExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.left.borrow_mut() = t;
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.right.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_AndExpr {
}
impl MachO_CsBlob_Expr_AndExpr {
pub fn left(&self) -> Ref<'_, OptRc<MachO_CsBlob_Expr>> {
self.left.borrow()
}
}
impl MachO_CsBlob_Expr_AndExpr {
pub fn right(&self) -> Ref<'_, OptRc<MachO_CsBlob_Expr>> {
self.right.borrow()
}
}
impl MachO_CsBlob_Expr_AndExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_AppleGenericAnchorExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
_io: RefCell<BytesReader>,
f_value: Cell<bool>,
value: RefCell<String>,
}
impl KStruct for MachO_CsBlob_Expr_AppleGenericAnchorExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
Ok(())
}
}
impl MachO_CsBlob_Expr_AppleGenericAnchorExpr {
pub fn value(
&self
) -> KResult<Ref<'_, String>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_value.get() {
return Ok(self.value.borrow());
}
self.f_value.set(true);
*self.value.borrow_mut() = "anchor apple generic".to_string();
Ok(self.value.borrow())
}
}
impl MachO_CsBlob_Expr_AppleGenericAnchorExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_CertFieldExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
cert_slot: RefCell<MachO_CsBlob_Expr_CertSlot>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
match: RefCell<OptRc<MachO_CsBlob_Match>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_CertFieldExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.cert_slot.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = Some(t);
let t = Self::read_into::<_, MachO_CsBlob_Match>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.match.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_CertFieldExpr {
}
impl MachO_CsBlob_Expr_CertFieldExpr {
pub fn cert_slot(&self) -> Ref<'_, MachO_CsBlob_Expr_CertSlot> {
self.cert_slot.borrow()
}
}
impl MachO_CsBlob_Expr_CertFieldExpr {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr_CertFieldExpr {
pub fn match(&self) -> Ref<'_, OptRc<MachO_CsBlob_Match>> {
self.match.borrow()
}
}
impl MachO_CsBlob_Expr_CertFieldExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_CertGenericExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
cert_slot: RefCell<MachO_CsBlob_Expr_CertSlot>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
match: RefCell<OptRc<MachO_CsBlob_Match>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_CertGenericExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.cert_slot.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = t;
let t = Self::read_into::<_, MachO_CsBlob_Match>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.match.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_CertGenericExpr {
}
impl MachO_CsBlob_Expr_CertGenericExpr {
pub fn cert_slot(&self) -> Ref<'_, MachO_CsBlob_Expr_CertSlot> {
self.cert_slot.borrow()
}
}
impl MachO_CsBlob_Expr_CertGenericExpr {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr_CertGenericExpr {
pub fn match(&self) -> Ref<'_, OptRc<MachO_CsBlob_Match>> {
self.match.borrow()
}
}
impl MachO_CsBlob_Expr_CertGenericExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_CertSlotExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
value: RefCell<MachO_CsBlob_Expr_CertSlot>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_CertSlotExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.value.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
Ok(())
}
}
impl MachO_CsBlob_Expr_CertSlotExpr {
}
impl MachO_CsBlob_Expr_CertSlotExpr {
pub fn value(&self) -> Ref<'_, MachO_CsBlob_Expr_CertSlot> {
self.value.borrow()
}
}
impl MachO_CsBlob_Expr_CertSlotExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_EntitlementFieldExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
match: RefCell<OptRc<MachO_CsBlob_Match>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_EntitlementFieldExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = t;
let t = Self::read_into::<_, MachO_CsBlob_Match>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.match.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_EntitlementFieldExpr {
}
impl MachO_CsBlob_Expr_EntitlementFieldExpr {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr_EntitlementFieldExpr {
pub fn match(&self) -> Ref<'_, OptRc<MachO_CsBlob_Match>> {
self.match.borrow()
}
}
impl MachO_CsBlob_Expr_EntitlementFieldExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_IdentExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
identifier: RefCell<OptRc<MachO_CsBlob_Data>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_IdentExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.identifier.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_IdentExpr {
}
impl MachO_CsBlob_Expr_IdentExpr {
pub fn identifier(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.identifier.borrow()
}
}
impl MachO_CsBlob_Expr_IdentExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_InfoKeyFieldExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
match: RefCell<OptRc<MachO_CsBlob_Match>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_InfoKeyFieldExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = t;
let t = Self::read_into::<_, MachO_CsBlob_Match>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.match.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_InfoKeyFieldExpr {
}
impl MachO_CsBlob_Expr_InfoKeyFieldExpr {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Expr_InfoKeyFieldExpr {
pub fn match(&self) -> Ref<'_, OptRc<MachO_CsBlob_Match>> {
self.match.borrow()
}
}
impl MachO_CsBlob_Expr_InfoKeyFieldExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Expr_OrExpr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Expr>,
pub _self: SharedType<Self>,
left: RefCell<OptRc<MachO_CsBlob_Expr>>,
right: RefCell<OptRc<MachO_CsBlob_Expr>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Expr_OrExpr {
type Root = MachO;
type Parent = MachO_CsBlob_Expr;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.left.borrow_mut() = t;
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.right.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Expr_OrExpr {
}
impl MachO_CsBlob_Expr_OrExpr {
pub fn left(&self) -> Ref<'_, OptRc<MachO_CsBlob_Expr>> {
self.left.borrow()
}
}
impl MachO_CsBlob_Expr_OrExpr {
pub fn right(&self) -> Ref<'_, OptRc<MachO_CsBlob_Expr>> {
self.right.borrow()
}
}
impl MachO_CsBlob_Expr_OrExpr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Match {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
match_op: RefCell<MachO_CsBlob_Match_Op>,
data: RefCell<OptRc<MachO_CsBlob_Data>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Match {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.match_op.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
if *self_rc.match_op() != MachO_CsBlob_Match_Op::Exists {
let t = Self::read_into::<_, MachO_CsBlob_Data>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data.borrow_mut() = t;
}
Ok(())
}
}
impl MachO_CsBlob_Match {
}
impl MachO_CsBlob_Match {
pub fn match_op(&self) -> Ref<'_, MachO_CsBlob_Match_Op> {
self.match_op.borrow()
}
}
impl MachO_CsBlob_Match {
pub fn data(&self) -> Ref<'_, OptRc<MachO_CsBlob_Data>> {
self.data.borrow()
}
}
impl MachO_CsBlob_Match {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_Match_Op {
Exists,
Equal,
Contains,
BeginsWith,
EndsWith,
LessThan,
GreaterThan,
LessEqual,
GreaterEqual,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_Match_Op {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_Match_Op> {
match flag {
0 => Ok(MachO_CsBlob_Match_Op::Exists),
1 => Ok(MachO_CsBlob_Match_Op::Equal),
2 => Ok(MachO_CsBlob_Match_Op::Contains),
3 => Ok(MachO_CsBlob_Match_Op::BeginsWith),
4 => Ok(MachO_CsBlob_Match_Op::EndsWith),
5 => Ok(MachO_CsBlob_Match_Op::LessThan),
6 => Ok(MachO_CsBlob_Match_Op::GreaterThan),
7 => Ok(MachO_CsBlob_Match_Op::LessEqual),
8 => Ok(MachO_CsBlob_Match_Op::GreaterEqual),
_ => Ok(MachO_CsBlob_Match_Op::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_Match_Op> for i64 {
fn from(v: &MachO_CsBlob_Match_Op) -> Self {
match *v {
MachO_CsBlob_Match_Op::Exists => 0,
MachO_CsBlob_Match_Op::Equal => 1,
MachO_CsBlob_Match_Op::Contains => 2,
MachO_CsBlob_Match_Op::BeginsWith => 3,
MachO_CsBlob_Match_Op::EndsWith => 4,
MachO_CsBlob_Match_Op::LessThan => 5,
MachO_CsBlob_Match_Op::GreaterThan => 6,
MachO_CsBlob_Match_Op::LessEqual => 7,
MachO_CsBlob_Match_Op::GreaterEqual => 8,
MachO_CsBlob_Match_Op::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_Match_Op {
fn default() -> Self { MachO_CsBlob_Match_Op::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Requirement {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
kind: RefCell<u32>,
expr: RefCell<OptRc<MachO_CsBlob_Expr>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Requirement {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.kind.borrow_mut() = _io.read_u4be()?.into();
let t = Self::read_into::<_, MachO_CsBlob_Expr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.expr.borrow_mut() = t;
Ok(())
}
}
impl MachO_CsBlob_Requirement {
}
impl MachO_CsBlob_Requirement {
pub fn kind(&self) -> Ref<'_, u32> {
self.kind.borrow()
}
}
impl MachO_CsBlob_Requirement {
pub fn expr(&self) -> Ref<'_, OptRc<MachO_CsBlob_Expr>> {
self.expr.borrow()
}
}
impl MachO_CsBlob_Requirement {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_Requirements {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
count: RefCell<u32>,
items: RefCell<Vec<OptRc<MachO_CsBlob_RequirementsBlobIndex>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_Requirements {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.count.borrow_mut() = _io.read_u4be()?.into();
*self_rc.items.borrow_mut() = Vec::new();
let l_items = *self_rc.count();
for _i in 0..l_items {
let t = Self::read_into::<_, MachO_CsBlob_RequirementsBlobIndex>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.items.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO_CsBlob_Requirements {
}
impl MachO_CsBlob_Requirements {
pub fn count(&self) -> Ref<'_, u32> {
self.count.borrow()
}
}
impl MachO_CsBlob_Requirements {
pub fn items(&self) -> Ref<'_, Vec<OptRc<MachO_CsBlob_RequirementsBlobIndex>>> {
self.items.borrow()
}
}
impl MachO_CsBlob_Requirements {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_RequirementsBlobIndex {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob_Requirements>,
pub _self: SharedType<Self>,
type: RefCell<MachO_CsBlob_RequirementsBlobIndex_RequirementType>,
offset: RefCell<u32>,
_io: RefCell<BytesReader>,
f_value: Cell<bool>,
value: RefCell<OptRc<MachO_CsBlob>>,
}
impl KStruct for MachO_CsBlob_RequirementsBlobIndex {
type Root = MachO;
type Parent = MachO_CsBlob_Requirements;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.type.borrow_mut() = (_io.read_u4be()? as i64).try_into()?;
*self_rc.offset.borrow_mut() = _io.read_u4be()?.into();
Ok(())
}
}
impl MachO_CsBlob_RequirementsBlobIndex {
pub fn value(
&self
) -> KResult<Ref<'_, OptRc<MachO_CsBlob>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_value.get() {
return Ok(self.value.borrow());
}
let _pos = _io.pos();
_io.seek(((*self.offset() as u32) - (8 as u32)) as usize)?;
let t = Self::read_into::<_, MachO_CsBlob>(&*_io, Some(self._root.clone()), None)?.into();
*self.value.borrow_mut() = t;
_io.seek(_pos)?;
Ok(self.value.borrow())
}
}
impl MachO_CsBlob_RequirementsBlobIndex {
pub fn type(&self) -> Ref<'_, MachO_CsBlob_RequirementsBlobIndex_RequirementType> {
self.type.borrow()
}
}
impl MachO_CsBlob_RequirementsBlobIndex {
pub fn offset(&self) -> Ref<'_, u32> {
self.offset.borrow()
}
}
impl MachO_CsBlob_RequirementsBlobIndex {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_CsBlob_RequirementsBlobIndex_RequirementType {
Host,
Guest,
Designated,
Library,
Unknown(i64),
}
impl TryFrom<i64> for MachO_CsBlob_RequirementsBlobIndex_RequirementType {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_CsBlob_RequirementsBlobIndex_RequirementType> {
match flag {
1 => Ok(MachO_CsBlob_RequirementsBlobIndex_RequirementType::Host),
2 => Ok(MachO_CsBlob_RequirementsBlobIndex_RequirementType::Guest),
3 => Ok(MachO_CsBlob_RequirementsBlobIndex_RequirementType::Designated),
4 => Ok(MachO_CsBlob_RequirementsBlobIndex_RequirementType::Library),
_ => Ok(MachO_CsBlob_RequirementsBlobIndex_RequirementType::Unknown(flag)),
}
}
}
impl From<&MachO_CsBlob_RequirementsBlobIndex_RequirementType> for i64 {
fn from(v: &MachO_CsBlob_RequirementsBlobIndex_RequirementType) -> Self {
match *v {
MachO_CsBlob_RequirementsBlobIndex_RequirementType::Host => 1,
MachO_CsBlob_RequirementsBlobIndex_RequirementType::Guest => 2,
MachO_CsBlob_RequirementsBlobIndex_RequirementType::Designated => 3,
MachO_CsBlob_RequirementsBlobIndex_RequirementType::Library => 4,
MachO_CsBlob_RequirementsBlobIndex_RequirementType::Unknown(v) => v
}
}
}
impl Default for MachO_CsBlob_RequirementsBlobIndex_RequirementType {
fn default() -> Self { MachO_CsBlob_RequirementsBlobIndex_RequirementType::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_CsBlob_SuperBlob {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_CsBlob>,
pub _self: SharedType<Self>,
count: RefCell<u32>,
blobs: RefCell<Vec<OptRc<MachO_CsBlob_BlobIndex>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_CsBlob_SuperBlob {
type Root = MachO;
type Parent = MachO_CsBlob;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.count.borrow_mut() = _io.read_u4be()?.into();
*self_rc.blobs.borrow_mut() = Vec::new();
let l_blobs = *self_rc.count();
for _i in 0..l_blobs {
let t = Self::read_into::<_, MachO_CsBlob_BlobIndex>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.blobs.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO_CsBlob_SuperBlob {
}
impl MachO_CsBlob_SuperBlob {
pub fn count(&self) -> Ref<'_, u32> {
self.count.borrow()
}
}
impl MachO_CsBlob_SuperBlob {
pub fn blobs(&self) -> Ref<'_, Vec<OptRc<MachO_CsBlob_BlobIndex>>> {
self.blobs.borrow()
}
}
impl MachO_CsBlob_SuperBlob {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
rebase_off: RefCell<u32>,
rebase_size: RefCell<u32>,
bind_off: RefCell<u32>,
bind_size: RefCell<u32>,
weak_bind_off: RefCell<u32>,
weak_bind_size: RefCell<u32>,
lazy_bind_off: RefCell<u32>,
lazy_bind_size: RefCell<u32>,
export_off: RefCell<u32>,
export_size: RefCell<u32>,
_io: RefCell<BytesReader>,
bind_raw: RefCell<Vec<u8>>,
exports_raw: RefCell<Vec<u8>>,
lazy_bind_raw: RefCell<Vec<u8>>,
rebase_raw: RefCell<Vec<u8>>,
weak_bind_raw: RefCell<Vec<u8>>,
f_bind: Cell<bool>,
bind: RefCell<OptRc<MachO_DyldInfoCommand_BindData>>,
f_exports: Cell<bool>,
exports: RefCell<OptRc<MachO_DyldInfoCommand_ExportNode>>,
f_lazy_bind: Cell<bool>,
lazy_bind: RefCell<OptRc<MachO_DyldInfoCommand_BindData>>,
f_rebase: Cell<bool>,
rebase: RefCell<OptRc<MachO_DyldInfoCommand_RebaseData>>,
f_weak_bind: Cell<bool>,
weak_bind: RefCell<OptRc<MachO_DyldInfoCommand_BindData>>,
}
impl KStruct for MachO_DyldInfoCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.rebase_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.rebase_size.borrow_mut() = _io.read_u4le()?.into();
*self_rc.bind_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.bind_size.borrow_mut() = _io.read_u4le()?.into();
*self_rc.weak_bind_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.weak_bind_size.borrow_mut() = _io.read_u4le()?.into();
*self_rc.lazy_bind_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.lazy_bind_size.borrow_mut() = _io.read_u4le()?.into();
*self_rc.export_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.export_size.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_DyldInfoCommand {
pub fn bind(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_BindData>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_bind.get() {
return Ok(self.bind.borrow());
}
if ((*self.bind_size() as u32) != (0 as u32)) {
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.bind_off() as usize)?;
*self.bind_raw.borrow_mut() = io.read_bytes(*self.bind_size() as usize)?.into();
let bind_raw = self.bind_raw.borrow();
let _t_bind_raw_io = BytesReader::from(bind_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand_BindData>(&_t_bind_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.bind.borrow_mut() = t;
io.seek(_pos)?;
}
Ok(self.bind.borrow())
}
pub fn exports(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_ExportNode>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_exports.get() {
return Ok(self.exports.borrow());
}
if ((*self.export_size() as u32) != (0 as u32)) {
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.export_off() as usize)?;
*self.exports_raw.borrow_mut() = io.read_bytes(*self.export_size() as usize)?.into();
let exports_raw = self.exports_raw.borrow();
let _t_exports_raw_io = BytesReader::from(exports_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand_ExportNode>(&_t_exports_raw_io, Some(self._root.clone()), None)?.into();
*self.exports.borrow_mut() = t;
io.seek(_pos)?;
}
Ok(self.exports.borrow())
}
pub fn lazy_bind(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_BindData>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_lazy_bind.get() {
return Ok(self.lazy_bind.borrow());
}
if ((*self.lazy_bind_size() as u32) != (0 as u32)) {
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.lazy_bind_off() as usize)?;
*self.lazy_bind_raw.borrow_mut() = io.read_bytes(*self.lazy_bind_size() as usize)?.into();
let lazy_bind_raw = self.lazy_bind_raw.borrow();
let _t_lazy_bind_raw_io = BytesReader::from(lazy_bind_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand_BindData>(&_t_lazy_bind_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.lazy_bind.borrow_mut() = t;
io.seek(_pos)?;
}
Ok(self.lazy_bind.borrow())
}
pub fn rebase(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_RebaseData>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_rebase.get() {
return Ok(self.rebase.borrow());
}
if ((*self.rebase_size() as u32) != (0 as u32)) {
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.rebase_off() as usize)?;
*self.rebase_raw.borrow_mut() = io.read_bytes(*self.rebase_size() as usize)?.into();
let rebase_raw = self.rebase_raw.borrow();
let _t_rebase_raw_io = BytesReader::from(rebase_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand_RebaseData>(&_t_rebase_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.rebase.borrow_mut() = t;
io.seek(_pos)?;
}
Ok(self.rebase.borrow())
}
pub fn weak_bind(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_BindData>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_weak_bind.get() {
return Ok(self.weak_bind.borrow());
}
if ((*self.weak_bind_size() as u32) != (0 as u32)) {
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.weak_bind_off() as usize)?;
*self.weak_bind_raw.borrow_mut() = io.read_bytes(*self.weak_bind_size() as usize)?.into();
let weak_bind_raw = self.weak_bind_raw.borrow();
let _t_weak_bind_raw_io = BytesReader::from(weak_bind_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand_BindData>(&_t_weak_bind_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.weak_bind.borrow_mut() = t;
io.seek(_pos)?;
}
Ok(self.weak_bind.borrow())
}
}
impl MachO_DyldInfoCommand {
pub fn rebase_off(&self) -> Ref<'_, u32> {
self.rebase_off.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn rebase_size(&self) -> Ref<'_, u32> {
self.rebase_size.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn bind_off(&self) -> Ref<'_, u32> {
self.bind_off.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn bind_size(&self) -> Ref<'_, u32> {
self.bind_size.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn weak_bind_off(&self) -> Ref<'_, u32> {
self.weak_bind_off.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn weak_bind_size(&self) -> Ref<'_, u32> {
self.weak_bind_size.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn lazy_bind_off(&self) -> Ref<'_, u32> {
self.lazy_bind_off.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn lazy_bind_size(&self) -> Ref<'_, u32> {
self.lazy_bind_size.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn export_off(&self) -> Ref<'_, u32> {
self.export_off.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn export_size(&self) -> Ref<'_, u32> {
self.export_size.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn bind_raw(&self) -> Ref<'_, Vec<u8>> {
self.bind_raw.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn exports_raw(&self) -> Ref<'_, Vec<u8>> {
self.exports_raw.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn lazy_bind_raw(&self) -> Ref<'_, Vec<u8>> {
self.lazy_bind_raw.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn rebase_raw(&self) -> Ref<'_, Vec<u8>> {
self.rebase_raw.borrow()
}
}
impl MachO_DyldInfoCommand {
pub fn weak_bind_raw(&self) -> Ref<'_, Vec<u8>> {
self.weak_bind_raw.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_DyldInfoCommand_BindOpcode {
Done,
SetDylibOrdinalImmediate,
SetDylibOrdinalUleb,
SetDylibSpecialImmediate,
SetSymbolTrailingFlagsImmediate,
SetTypeImmediate,
SetAppendSleb,
SetSegmentAndOffsetUleb,
AddAddressUleb,
DoBind,
DoBindAddAddressUleb,
DoBindAddAddressImmediateScaled,
DoBindUlebTimesSkippingUleb,
Unknown(i64),
}
impl TryFrom<i64> for MachO_DyldInfoCommand_BindOpcode {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_DyldInfoCommand_BindOpcode> {
match flag {
0 => Ok(MachO_DyldInfoCommand_BindOpcode::Done),
16 => Ok(MachO_DyldInfoCommand_BindOpcode::SetDylibOrdinalImmediate),
32 => Ok(MachO_DyldInfoCommand_BindOpcode::SetDylibOrdinalUleb),
48 => Ok(MachO_DyldInfoCommand_BindOpcode::SetDylibSpecialImmediate),
64 => Ok(MachO_DyldInfoCommand_BindOpcode::SetSymbolTrailingFlagsImmediate),
80 => Ok(MachO_DyldInfoCommand_BindOpcode::SetTypeImmediate),
96 => Ok(MachO_DyldInfoCommand_BindOpcode::SetAppendSleb),
112 => Ok(MachO_DyldInfoCommand_BindOpcode::SetSegmentAndOffsetUleb),
128 => Ok(MachO_DyldInfoCommand_BindOpcode::AddAddressUleb),
144 => Ok(MachO_DyldInfoCommand_BindOpcode::DoBind),
160 => Ok(MachO_DyldInfoCommand_BindOpcode::DoBindAddAddressUleb),
176 => Ok(MachO_DyldInfoCommand_BindOpcode::DoBindAddAddressImmediateScaled),
192 => Ok(MachO_DyldInfoCommand_BindOpcode::DoBindUlebTimesSkippingUleb),
_ => Ok(MachO_DyldInfoCommand_BindOpcode::Unknown(flag)),
}
}
}
impl From<&MachO_DyldInfoCommand_BindOpcode> for i64 {
fn from(v: &MachO_DyldInfoCommand_BindOpcode) -> Self {
match *v {
MachO_DyldInfoCommand_BindOpcode::Done => 0,
MachO_DyldInfoCommand_BindOpcode::SetDylibOrdinalImmediate => 16,
MachO_DyldInfoCommand_BindOpcode::SetDylibOrdinalUleb => 32,
MachO_DyldInfoCommand_BindOpcode::SetDylibSpecialImmediate => 48,
MachO_DyldInfoCommand_BindOpcode::SetSymbolTrailingFlagsImmediate => 64,
MachO_DyldInfoCommand_BindOpcode::SetTypeImmediate => 80,
MachO_DyldInfoCommand_BindOpcode::SetAppendSleb => 96,
MachO_DyldInfoCommand_BindOpcode::SetSegmentAndOffsetUleb => 112,
MachO_DyldInfoCommand_BindOpcode::AddAddressUleb => 128,
MachO_DyldInfoCommand_BindOpcode::DoBind => 144,
MachO_DyldInfoCommand_BindOpcode::DoBindAddAddressUleb => 160,
MachO_DyldInfoCommand_BindOpcode::DoBindAddAddressImmediateScaled => 176,
MachO_DyldInfoCommand_BindOpcode::DoBindUlebTimesSkippingUleb => 192,
MachO_DyldInfoCommand_BindOpcode::Unknown(v) => v
}
}
}
impl Default for MachO_DyldInfoCommand_BindOpcode {
fn default() -> Self { MachO_DyldInfoCommand_BindOpcode::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_BindData {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_DyldInfoCommand>,
pub _self: SharedType<Self>,
items: RefCell<Vec<OptRc<MachO_DyldInfoCommand_BindItem>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_DyldInfoCommand_BindData {
type Root = MachO;
type Parent = MachO_DyldInfoCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while !_io.is_eof() {
let t = Self::read_into::<_, MachO_DyldInfoCommand_BindItem>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.items.borrow_mut().push(t);
_i += 1;
}
}
Ok(())
}
}
impl MachO_DyldInfoCommand_BindData {
}
impl MachO_DyldInfoCommand_BindData {
pub fn items(&self) -> Ref<'_, Vec<OptRc<MachO_DyldInfoCommand_BindItem>>> {
self.items.borrow()
}
}
impl MachO_DyldInfoCommand_BindData {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_BindItem {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_DyldInfoCommand_BindData>,
pub _self: SharedType<Self>,
opcode_and_immediate: RefCell<u8>,
uleb: RefCell<OptRc<MachO_Uleb128>>,
skip: RefCell<OptRc<MachO_Uleb128>>,
symbol: RefCell<String>,
_io: RefCell<BytesReader>,
f_immediate: Cell<bool>,
immediate: RefCell<i32>,
f_opcode: Cell<bool>,
opcode: RefCell<MachO_DyldInfoCommand_BindOpcode>,
}
impl KStruct for MachO_DyldInfoCommand_BindItem {
type Root = MachO;
type Parent = MachO_DyldInfoCommand_BindData;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.opcode_and_immediate.borrow_mut() = _io.read_u1()?.into();
if ((*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::SetDylibOrdinalUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::SetAppendSleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::SetSegmentAndOffsetUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::AddAddressUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::DoBindAddAddressUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::DoBindUlebTimesSkippingUleb)) {
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.uleb.borrow_mut() = t;
}
if *self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::DoBindUlebTimesSkippingUleb {
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.skip.borrow_mut() = t;
}
if *self_rc.opcode()? == MachO_DyldInfoCommand_BindOpcode::SetSymbolTrailingFlagsImmediate {
*self_rc.symbol.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "ASCII")?;
}
Ok(())
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn immediate(
&self
) -> KResult<Ref<'_, i32>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_immediate.get() {
return Ok(self.immediate.borrow());
}
self.f_immediate.set(true);
*self.immediate.borrow_mut() = (((*self.opcode_and_immediate() as u8) & (15 as u8))) as i32;
Ok(self.immediate.borrow())
}
pub fn opcode(
&self
) -> KResult<Ref<'_, MachO_DyldInfoCommand_BindOpcode>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_opcode.get() {
return Ok(self.opcode.borrow());
}
self.f_opcode.set(true);
*self.opcode.borrow_mut() = (((*self.opcode_and_immediate() as u8) & (240 as u8)) as i64).try_into()?;
Ok(self.opcode.borrow())
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn opcode_and_immediate(&self) -> Ref<'_, u8> {
self.opcode_and_immediate.borrow()
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn uleb(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.uleb.borrow()
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn skip(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.skip.borrow()
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn symbol(&self) -> Ref<'_, String> {
self.symbol.borrow()
}
}
impl MachO_DyldInfoCommand_BindItem {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_ExportNode {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
terminal_size: RefCell<OptRc<MachO_Uleb128>>,
children_count: RefCell<u8>,
children: RefCell<Vec<OptRc<MachO_DyldInfoCommand_ExportNode_Child>>>,
terminal: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_DyldInfoCommand_ExportNode {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.terminal_size.borrow_mut() = t;
*self_rc.children_count.borrow_mut() = _io.read_u1()?.into();
*self_rc.children.borrow_mut() = Vec::new();
let l_children = *self_rc.children_count();
for _i in 0..l_children {
let t = Self::read_into::<_, MachO_DyldInfoCommand_ExportNode_Child>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.children.borrow_mut().push(t);
}
*self_rc.terminal.borrow_mut() = _io.read_bytes(*self_rc.terminal_size().value()? as usize)?.into();
Ok(())
}
}
impl MachO_DyldInfoCommand_ExportNode {
}
impl MachO_DyldInfoCommand_ExportNode {
pub fn terminal_size(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.terminal_size.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode {
pub fn children_count(&self) -> Ref<'_, u8> {
self.children_count.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode {
pub fn children(&self) -> Ref<'_, Vec<OptRc<MachO_DyldInfoCommand_ExportNode_Child>>> {
self.children.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode {
pub fn terminal(&self) -> Ref<'_, Vec<u8>> {
self.terminal.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_ExportNode_Child {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_DyldInfoCommand_ExportNode>,
pub _self: SharedType<Self>,
name: RefCell<String>,
node_offset: RefCell<OptRc<MachO_Uleb128>>,
_io: RefCell<BytesReader>,
f_value: Cell<bool>,
value: RefCell<OptRc<MachO_DyldInfoCommand_ExportNode>>,
}
impl KStruct for MachO_DyldInfoCommand_ExportNode_Child {
type Root = MachO;
type Parent = MachO_DyldInfoCommand_ExportNode;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.name.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "ASCII")?;
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.node_offset.borrow_mut() = t;
Ok(())
}
}
impl MachO_DyldInfoCommand_ExportNode_Child {
pub fn value(
&self
) -> KResult<Ref<'_, OptRc<MachO_DyldInfoCommand_ExportNode>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_value.get() {
return Ok(self.value.borrow());
}
let _pos = _io.pos();
_io.seek(*self.node_offset().value()? as usize)?;
let t = Self::read_into::<_, MachO_DyldInfoCommand_ExportNode>(&*_io, Some(self._root.clone()), None)?.into();
*self.value.borrow_mut() = t;
_io.seek(_pos)?;
Ok(self.value.borrow())
}
}
impl MachO_DyldInfoCommand_ExportNode_Child {
pub fn name(&self) -> Ref<'_, String> {
self.name.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode_Child {
pub fn node_offset(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.node_offset.borrow()
}
}
impl MachO_DyldInfoCommand_ExportNode_Child {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_RebaseData {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_DyldInfoCommand>,
pub _self: SharedType<Self>,
items: RefCell<Vec<OptRc<MachO_DyldInfoCommand_RebaseData_RebaseItem>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_DyldInfoCommand_RebaseData {
type Root = MachO;
type Parent = MachO_DyldInfoCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while {
let t = Self::read_into::<_, MachO_DyldInfoCommand_RebaseData_RebaseItem>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.items.borrow_mut().push(t);
let _t_items = self_rc.items.borrow();
let _tmpa = _t_items.last().unwrap();
_i += 1;
let x = !(*_tmpa.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::Done);
x
} {}
}
Ok(())
}
}
impl MachO_DyldInfoCommand_RebaseData {
}
impl MachO_DyldInfoCommand_RebaseData {
pub fn items(&self) -> Ref<'_, Vec<OptRc<MachO_DyldInfoCommand_RebaseData_RebaseItem>>> {
self.items.borrow()
}
}
impl MachO_DyldInfoCommand_RebaseData {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum MachO_DyldInfoCommand_RebaseData_Opcode {
Done,
SetTypeImmediate,
SetSegmentAndOffsetUleb,
AddAddressUleb,
AddAddressImmediateScaled,
DoRebaseImmediateTimes,
DoRebaseUlebTimes,
DoRebaseAddAddressUleb,
DoRebaseUlebTimesSkippingUleb,
Unknown(i64),
}
impl TryFrom<i64> for MachO_DyldInfoCommand_RebaseData_Opcode {
type Error = KError;
fn try_from(flag: i64) -> KResult<MachO_DyldInfoCommand_RebaseData_Opcode> {
match flag {
0 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::Done),
16 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::SetTypeImmediate),
32 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::SetSegmentAndOffsetUleb),
48 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::AddAddressUleb),
64 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::AddAddressImmediateScaled),
80 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseImmediateTimes),
96 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimes),
112 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseAddAddressUleb),
128 => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimesSkippingUleb),
_ => Ok(MachO_DyldInfoCommand_RebaseData_Opcode::Unknown(flag)),
}
}
}
impl From<&MachO_DyldInfoCommand_RebaseData_Opcode> for i64 {
fn from(v: &MachO_DyldInfoCommand_RebaseData_Opcode) -> Self {
match *v {
MachO_DyldInfoCommand_RebaseData_Opcode::Done => 0,
MachO_DyldInfoCommand_RebaseData_Opcode::SetTypeImmediate => 16,
MachO_DyldInfoCommand_RebaseData_Opcode::SetSegmentAndOffsetUleb => 32,
MachO_DyldInfoCommand_RebaseData_Opcode::AddAddressUleb => 48,
MachO_DyldInfoCommand_RebaseData_Opcode::AddAddressImmediateScaled => 64,
MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseImmediateTimes => 80,
MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimes => 96,
MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseAddAddressUleb => 112,
MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimesSkippingUleb => 128,
MachO_DyldInfoCommand_RebaseData_Opcode::Unknown(v) => v
}
}
}
impl Default for MachO_DyldInfoCommand_RebaseData_Opcode {
fn default() -> Self { MachO_DyldInfoCommand_RebaseData_Opcode::Unknown(0) }
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_DyldInfoCommand_RebaseData>,
pub _self: SharedType<Self>,
opcode_and_immediate: RefCell<u8>,
uleb: RefCell<OptRc<MachO_Uleb128>>,
skip: RefCell<OptRc<MachO_Uleb128>>,
_io: RefCell<BytesReader>,
f_immediate: Cell<bool>,
immediate: RefCell<i32>,
f_opcode: Cell<bool>,
opcode: RefCell<MachO_DyldInfoCommand_RebaseData_Opcode>,
}
impl KStruct for MachO_DyldInfoCommand_RebaseData_RebaseItem {
type Root = MachO;
type Parent = MachO_DyldInfoCommand_RebaseData;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.opcode_and_immediate.borrow_mut() = _io.read_u1()?.into();
if ((*self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::SetSegmentAndOffsetUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::AddAddressUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimes) || (*self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseAddAddressUleb) || (*self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimesSkippingUleb)) {
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.uleb.borrow_mut() = t;
}
if *self_rc.opcode()? == MachO_DyldInfoCommand_RebaseData_Opcode::DoRebaseUlebTimesSkippingUleb {
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.skip.borrow_mut() = t;
}
Ok(())
}
}
impl MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub fn immediate(
&self
) -> KResult<Ref<'_, i32>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_immediate.get() {
return Ok(self.immediate.borrow());
}
self.f_immediate.set(true);
*self.immediate.borrow_mut() = (((*self.opcode_and_immediate() as u8) & (15 as u8))) as i32;
Ok(self.immediate.borrow())
}
pub fn opcode(
&self
) -> KResult<Ref<'_, MachO_DyldInfoCommand_RebaseData_Opcode>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_opcode.get() {
return Ok(self.opcode.borrow());
}
self.f_opcode.set(true);
*self.opcode.borrow_mut() = (((*self.opcode_and_immediate() as u8) & (240 as u8)) as i64).try_into()?;
Ok(self.opcode.borrow())
}
}
impl MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub fn opcode_and_immediate(&self) -> Ref<'_, u8> {
self.opcode_and_immediate.borrow()
}
}
impl MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub fn uleb(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.uleb.borrow()
}
}
impl MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub fn skip(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.skip.borrow()
}
}
impl MachO_DyldInfoCommand_RebaseData_RebaseItem {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DylibCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
name_offset: RefCell<u32>,
timestamp: RefCell<u32>,
current_version: RefCell<u32>,
compatibility_version: RefCell<u32>,
name: RefCell<String>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_DylibCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.name_offset.borrow_mut() = _io.read_u4le()?.into();
*self_rc.timestamp.borrow_mut() = _io.read_u4le()?.into();
*self_rc.current_version.borrow_mut() = _io.read_u4le()?.into();
*self_rc.compatibility_version.borrow_mut() = _io.read_u4le()?.into();
*self_rc.name.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
Ok(())
}
}
impl MachO_DylibCommand {
}
impl MachO_DylibCommand {
pub fn name_offset(&self) -> Ref<'_, u32> {
self.name_offset.borrow()
}
}
impl MachO_DylibCommand {
pub fn timestamp(&self) -> Ref<'_, u32> {
self.timestamp.borrow()
}
}
impl MachO_DylibCommand {
pub fn current_version(&self) -> Ref<'_, u32> {
self.current_version.borrow()
}
}
impl MachO_DylibCommand {
pub fn compatibility_version(&self) -> Ref<'_, u32> {
self.compatibility_version.borrow()
}
}
impl MachO_DylibCommand {
pub fn name(&self) -> Ref<'_, String> {
self.name.borrow()
}
}
impl MachO_DylibCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DylinkerCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
name: RefCell<OptRc<MachO_LcStr>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_DylinkerCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_LcStr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.name.borrow_mut() = t;
Ok(())
}
}
impl MachO_DylinkerCommand {
}
impl MachO_DylinkerCommand {
pub fn name(&self) -> Ref<'_, OptRc<MachO_LcStr>> {
self.name.borrow()
}
}
impl MachO_DylinkerCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_DysymtabCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
i_local_sym: RefCell<u32>,
n_local_sym: RefCell<u32>,
i_ext_def_sym: RefCell<u32>,
n_ext_def_sym: RefCell<u32>,
i_undef_sym: RefCell<u32>,
n_undef_sym: RefCell<u32>,
toc_off: RefCell<u32>,
n_toc: RefCell<u32>,
mod_tab_off: RefCell<u32>,
n_mod_tab: RefCell<u32>,
ext_ref_sym_off: RefCell<u32>,
n_ext_ref_syms: RefCell<u32>,
indirect_sym_off: RefCell<u32>,
n_indirect_syms: RefCell<u32>,
ext_rel_off: RefCell<u32>,
n_ext_rel: RefCell<u32>,
loc_rel_off: RefCell<u32>,
n_loc_rel: RefCell<u32>,
_io: RefCell<BytesReader>,
f_indirect_symbols: Cell<bool>,
indirect_symbols: RefCell<Vec<u32>>,
}
impl KStruct for MachO_DysymtabCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.i_local_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_local_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.i_ext_def_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_ext_def_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.i_undef_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_undef_sym.borrow_mut() = _io.read_u4le()?.into();
*self_rc.toc_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_toc.borrow_mut() = _io.read_u4le()?.into();
*self_rc.mod_tab_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_mod_tab.borrow_mut() = _io.read_u4le()?.into();
*self_rc.ext_ref_sym_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_ext_ref_syms.borrow_mut() = _io.read_u4le()?.into();
*self_rc.indirect_sym_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_indirect_syms.borrow_mut() = _io.read_u4le()?.into();
*self_rc.ext_rel_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_ext_rel.borrow_mut() = _io.read_u4le()?.into();
*self_rc.loc_rel_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_loc_rel.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_DysymtabCommand {
pub fn indirect_symbols(
&self
) -> KResult<Ref<'_, Vec<u32>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_indirect_symbols.get() {
return Ok(self.indirect_symbols.borrow());
}
self.f_indirect_symbols.set(true);
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.indirect_sym_off() as usize)?;
*self.indirect_symbols.borrow_mut() = Vec::new();
let l_indirect_symbols = *self.n_indirect_syms();
for _i in 0..l_indirect_symbols {
self.indirect_symbols.borrow_mut().push(io.read_u4le()?.into());
}
io.seek(_pos)?;
Ok(self.indirect_symbols.borrow())
}
}
impl MachO_DysymtabCommand {
pub fn i_local_sym(&self) -> Ref<'_, u32> {
self.i_local_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_local_sym(&self) -> Ref<'_, u32> {
self.n_local_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn i_ext_def_sym(&self) -> Ref<'_, u32> {
self.i_ext_def_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_ext_def_sym(&self) -> Ref<'_, u32> {
self.n_ext_def_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn i_undef_sym(&self) -> Ref<'_, u32> {
self.i_undef_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_undef_sym(&self) -> Ref<'_, u32> {
self.n_undef_sym.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn toc_off(&self) -> Ref<'_, u32> {
self.toc_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_toc(&self) -> Ref<'_, u32> {
self.n_toc.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn mod_tab_off(&self) -> Ref<'_, u32> {
self.mod_tab_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_mod_tab(&self) -> Ref<'_, u32> {
self.n_mod_tab.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn ext_ref_sym_off(&self) -> Ref<'_, u32> {
self.ext_ref_sym_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_ext_ref_syms(&self) -> Ref<'_, u32> {
self.n_ext_ref_syms.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn indirect_sym_off(&self) -> Ref<'_, u32> {
self.indirect_sym_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_indirect_syms(&self) -> Ref<'_, u32> {
self.n_indirect_syms.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn ext_rel_off(&self) -> Ref<'_, u32> {
self.ext_rel_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_ext_rel(&self) -> Ref<'_, u32> {
self.n_ext_rel.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn loc_rel_off(&self) -> Ref<'_, u32> {
self.loc_rel_off.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn n_loc_rel(&self) -> Ref<'_, u32> {
self.n_loc_rel.borrow()
}
}
impl MachO_DysymtabCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_EncryptionInfoCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
cryptoff: RefCell<u32>,
cryptsize: RefCell<u32>,
cryptid: RefCell<u32>,
pad: RefCell<u32>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_EncryptionInfoCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.cryptoff.borrow_mut() = _io.read_u4le()?.into();
*self_rc.cryptsize.borrow_mut() = _io.read_u4le()?.into();
*self_rc.cryptid.borrow_mut() = _io.read_u4le()?.into();
if ((*_r.magic() == MachO_MagicType::MachoBeX64) || (*_r.magic() == MachO_MagicType::MachoLeX64)) {
*self_rc.pad.borrow_mut() = _io.read_u4le()?.into();
}
Ok(())
}
}
impl MachO_EncryptionInfoCommand {
}
impl MachO_EncryptionInfoCommand {
pub fn cryptoff(&self) -> Ref<'_, u32> {
self.cryptoff.borrow()
}
}
impl MachO_EncryptionInfoCommand {
pub fn cryptsize(&self) -> Ref<'_, u32> {
self.cryptsize.borrow()
}
}
impl MachO_EncryptionInfoCommand {
pub fn cryptid(&self) -> Ref<'_, u32> {
self.cryptid.borrow()
}
}
impl MachO_EncryptionInfoCommand {
pub fn pad(&self) -> Ref<'_, u32> {
self.pad.borrow()
}
}
impl MachO_EncryptionInfoCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_EntryPointCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
entry_off: RefCell<u64>,
stack_size: RefCell<u64>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_EntryPointCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.entry_off.borrow_mut() = _io.read_u8le()?.into();
*self_rc.stack_size.borrow_mut() = _io.read_u8le()?.into();
Ok(())
}
}
impl MachO_EntryPointCommand {
}
impl MachO_EntryPointCommand {
pub fn entry_off(&self) -> Ref<'_, u64> {
self.entry_off.borrow()
}
}
impl MachO_EntryPointCommand {
pub fn stack_size(&self) -> Ref<'_, u64> {
self.stack_size.borrow()
}
}
impl MachO_EntryPointCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_LcStr {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
length: RefCell<u32>,
value: RefCell<String>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_LcStr {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.length.borrow_mut() = _io.read_u4le()?.into();
*self_rc.value.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
Ok(())
}
}
impl MachO_LcStr {
}
impl MachO_LcStr {
pub fn length(&self) -> Ref<'_, u32> {
self.length.borrow()
}
}
impl MachO_LcStr {
pub fn value(&self) -> Ref<'_, String> {
self.value.borrow()
}
}
impl MachO_LcStr {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_LinkeditDataCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
data_off: RefCell<u32>,
data_size: RefCell<u32>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_LinkeditDataCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.data_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.data_size.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_LinkeditDataCommand {
}
impl MachO_LinkeditDataCommand {
pub fn data_off(&self) -> Ref<'_, u32> {
self.data_off.borrow()
}
}
impl MachO_LinkeditDataCommand {
pub fn data_size(&self) -> Ref<'_, u32> {
self.data_size.borrow()
}
}
impl MachO_LinkeditDataCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_LinkerOptionCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
num_strings: RefCell<u32>,
strings: RefCell<Vec<String>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_LinkerOptionCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.num_strings.borrow_mut() = _io.read_u4le()?.into();
*self_rc.strings.borrow_mut() = Vec::new();
let l_strings = *self_rc.num_strings();
for _i in 0..l_strings {
self_rc.strings.borrow_mut().push(bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?);
}
Ok(())
}
}
impl MachO_LinkerOptionCommand {
}
impl MachO_LinkerOptionCommand {
pub fn num_strings(&self) -> Ref<'_, u32> {
self.num_strings.borrow()
}
}
impl MachO_LinkerOptionCommand {
pub fn strings(&self) -> Ref<'_, Vec<String>> {
self.strings.borrow()
}
}
impl MachO_LinkerOptionCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_LoadCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO>,
pub _self: SharedType<Self>,
type: RefCell<MachO_LoadCommandType>,
size: RefCell<u32>,
body: RefCell<Option<MachO_LoadCommand_Body>>,
_io: RefCell<BytesReader>,
body_raw: RefCell<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub enum MachO_LoadCommand_Body {
MachO_RoutinesCommand64(OptRc<MachO_RoutinesCommand64>),
MachO_CodeSignatureCommand(OptRc<MachO_CodeSignatureCommand>),
MachO_EntryPointCommand(OptRc<MachO_EntryPointCommand>),
MachO_SourceVersionCommand(OptRc<MachO_SourceVersionCommand>),
MachO_SubCommand(OptRc<MachO_SubCommand>),
Bytes(Vec<u8>),
MachO_EncryptionInfoCommand(OptRc<MachO_EncryptionInfoCommand>),
MachO_UuidCommand(OptRc<MachO_UuidCommand>),
MachO_SymtabCommand(OptRc<MachO_SymtabCommand>),
MachO_SegmentCommand64(OptRc<MachO_SegmentCommand64>),
MachO_RpathCommand(OptRc<MachO_RpathCommand>),
MachO_TwolevelHintsCommand(OptRc<MachO_TwolevelHintsCommand>),
MachO_VersionMinCommand(OptRc<MachO_VersionMinCommand>),
MachO_SegmentCommand(OptRc<MachO_SegmentCommand>),
MachO_LinkerOptionCommand(OptRc<MachO_LinkerOptionCommand>),
MachO_DylinkerCommand(OptRc<MachO_DylinkerCommand>),
MachO_DylibCommand(OptRc<MachO_DylibCommand>),
MachO_DyldInfoCommand(OptRc<MachO_DyldInfoCommand>),
MachO_RoutinesCommand(OptRc<MachO_RoutinesCommand>),
MachO_BuildVersionCommand(OptRc<MachO_BuildVersionCommand>),
MachO_DysymtabCommand(OptRc<MachO_DysymtabCommand>),
MachO_LinkeditDataCommand(OptRc<MachO_LinkeditDataCommand>),
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_RoutinesCommand64> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_RoutinesCommand64(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_RoutinesCommand64, got {:?}", v)
}
}
impl From<OptRc<MachO_RoutinesCommand64>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_RoutinesCommand64>) -> Self {
Self::MachO_RoutinesCommand64(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_CodeSignatureCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_CodeSignatureCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_CodeSignatureCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_CodeSignatureCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_CodeSignatureCommand>) -> Self {
Self::MachO_CodeSignatureCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_EntryPointCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_EntryPointCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_EntryPointCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_EntryPointCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_EntryPointCommand>) -> Self {
Self::MachO_EntryPointCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_SourceVersionCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_SourceVersionCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_SourceVersionCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_SourceVersionCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_SourceVersionCommand>) -> Self {
Self::MachO_SourceVersionCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_SubCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_SubCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_SubCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_SubCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_SubCommand>) -> Self {
Self::MachO_SubCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for Vec<u8> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::Bytes(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::Bytes, got {:?}", v)
}
}
impl From<Vec<u8>> for MachO_LoadCommand_Body {
fn from(v: Vec<u8>) -> Self {
Self::Bytes(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_EncryptionInfoCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_EncryptionInfoCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_EncryptionInfoCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_EncryptionInfoCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_EncryptionInfoCommand>) -> Self {
Self::MachO_EncryptionInfoCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_UuidCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_UuidCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_UuidCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_UuidCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_UuidCommand>) -> Self {
Self::MachO_UuidCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_SymtabCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_SymtabCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_SymtabCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_SymtabCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_SymtabCommand>) -> Self {
Self::MachO_SymtabCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_SegmentCommand64> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_SegmentCommand64(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_SegmentCommand64, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_SegmentCommand64>) -> Self {
Self::MachO_SegmentCommand64(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_RpathCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_RpathCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_RpathCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_RpathCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_RpathCommand>) -> Self {
Self::MachO_RpathCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_TwolevelHintsCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_TwolevelHintsCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_TwolevelHintsCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_TwolevelHintsCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_TwolevelHintsCommand>) -> Self {
Self::MachO_TwolevelHintsCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_VersionMinCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_VersionMinCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_VersionMinCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_VersionMinCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_VersionMinCommand>) -> Self {
Self::MachO_VersionMinCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_SegmentCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_SegmentCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_SegmentCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_SegmentCommand>) -> Self {
Self::MachO_SegmentCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_LinkerOptionCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_LinkerOptionCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_LinkerOptionCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_LinkerOptionCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_LinkerOptionCommand>) -> Self {
Self::MachO_LinkerOptionCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_DylinkerCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_DylinkerCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_DylinkerCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_DylinkerCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_DylinkerCommand>) -> Self {
Self::MachO_DylinkerCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_DylibCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_DylibCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_DylibCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_DylibCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_DylibCommand>) -> Self {
Self::MachO_DylibCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_DyldInfoCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_DyldInfoCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_DyldInfoCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_DyldInfoCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_DyldInfoCommand>) -> Self {
Self::MachO_DyldInfoCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_RoutinesCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_RoutinesCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_RoutinesCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_RoutinesCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_RoutinesCommand>) -> Self {
Self::MachO_RoutinesCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_BuildVersionCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_BuildVersionCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_BuildVersionCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_BuildVersionCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_BuildVersionCommand>) -> Self {
Self::MachO_BuildVersionCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_DysymtabCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_DysymtabCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_DysymtabCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_DysymtabCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_DysymtabCommand>) -> Self {
Self::MachO_DysymtabCommand(v)
}
}
impl From<&MachO_LoadCommand_Body> for OptRc<MachO_LinkeditDataCommand> {
fn from(v: &MachO_LoadCommand_Body) -> Self {
if let MachO_LoadCommand_Body::MachO_LinkeditDataCommand(x) = v {
return x.clone();
}
panic!("expected MachO_LoadCommand_Body::MachO_LinkeditDataCommand, got {:?}", v)
}
}
impl From<OptRc<MachO_LinkeditDataCommand>> for MachO_LoadCommand_Body {
fn from(v: OptRc<MachO_LinkeditDataCommand>) -> Self {
Self::MachO_LinkeditDataCommand(v)
}
}
impl KStruct for MachO_LoadCommand {
type Root = MachO;
type Parent = MachO;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.type.borrow_mut() = (_io.read_u4le()? as i64).try_into()?;
*self_rc.size.borrow_mut() = _io.read_u4le()?.into();
match *self_rc.type() {
MachO_LoadCommandType::BuildVersion => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_BuildVersionCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::CodeSignature => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_CodeSignatureCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::DataInCode => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkeditDataCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::DyldEnvironment => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylinkerCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::DyldInfo => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::DyldInfoOnly => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DyldInfoCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::DylibCodeSignDrs => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkeditDataCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Dysymtab => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DysymtabCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::EncryptionInfo => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_EncryptionInfoCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::EncryptionInfo64 => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_EncryptionInfoCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::FunctionStarts => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkeditDataCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::IdDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::IdDylinker => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylinkerCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LazyLoadDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LinkerOptimizationHint => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkeditDataCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LinkerOption => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkerOptionCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LoadDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LoadDylinker => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylinkerCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LoadUpwardDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::LoadWeakDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Main => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_EntryPointCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::ReexportDylib => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_DylibCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Routines => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_RoutinesCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Routines64 => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_RoutinesCommand64>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Rpath => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_RpathCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Segment => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Segment64 => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SegmentSplitInfo => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_LinkeditDataCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SourceVersion => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SourceVersionCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SubClient => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SubCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SubFramework => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SubCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SubLibrary => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SubCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::SubUmbrella => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SubCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Symtab => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SymtabCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::TwolevelHints => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_TwolevelHintsCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::Uuid => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_UuidCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::VersionMinIphoneos => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_VersionMinCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::VersionMinMacosx => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_VersionMinCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::VersionMinTvos => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_VersionMinCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
MachO_LoadCommandType::VersionMinWatchos => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_VersionMinCommand>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
_ => {
*self_rc.body.borrow_mut() = Some(_io.read_bytes(((*self_rc.size() as u32) - (8 as u32)) as usize)?.into());
}
}
Ok(())
}
}
impl MachO_LoadCommand {
}
impl MachO_LoadCommand {
pub fn type(&self) -> Ref<'_, MachO_LoadCommandType> {
self.type.borrow()
}
}
impl MachO_LoadCommand {
pub fn size(&self) -> Ref<'_, u32> {
self.size.borrow()
}
}
impl MachO_LoadCommand {
pub fn body(&self) -> Ref<'_, Option<MachO_LoadCommand_Body>> {
self.body.borrow()
}
}
impl MachO_LoadCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_LoadCommand {
pub fn body_raw(&self) -> Ref<'_, Vec<u8>> {
self.body_raw.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_MachHeader {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO>,
pub _self: SharedType<Self>,
cputype: RefCell<MachO_CpuType>,
cpusubtype: RefCell<u32>,
filetype: RefCell<MachO_FileType>,
ncmds: RefCell<u32>,
sizeofcmds: RefCell<u32>,
flags: RefCell<u32>,
reserved: RefCell<u32>,
_io: RefCell<BytesReader>,
f_flags_obj: Cell<bool>,
flags_obj: RefCell<OptRc<MachO_MachoFlags>>,
}
impl KStruct for MachO_MachHeader {
type Root = MachO;
type Parent = MachO;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.cputype.borrow_mut() = (_io.read_u4le()? as i64).try_into()?;
*self_rc.cpusubtype.borrow_mut() = _io.read_u4le()?.into();
*self_rc.filetype.borrow_mut() = (_io.read_u4le()? as i64).try_into()?;
*self_rc.ncmds.borrow_mut() = _io.read_u4le()?.into();
*self_rc.sizeofcmds.borrow_mut() = _io.read_u4le()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4le()?.into();
if ((*_r.magic() == MachO_MagicType::MachoBeX64) || (*_r.magic() == MachO_MagicType::MachoLeX64)) {
*self_rc.reserved.borrow_mut() = _io.read_u4le()?.into();
}
Ok(())
}
}
impl MachO_MachHeader {
pub fn flags_obj(
&self
) -> KResult<Ref<'_, OptRc<MachO_MachoFlags>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_flags_obj.get() {
return Ok(self.flags_obj.borrow());
}
let f = |t : &mut MachO_MachoFlags| Ok(t.set_params((*self.flags()).try_into().map_err(|_| KError::CastError)?));
let t = Self::read_into_with_init::<_, MachO_MachoFlags>(&*_io, Some(self._root.clone()), Some(self._self.clone()), &f)?.into();
*self.flags_obj.borrow_mut() = t;
Ok(self.flags_obj.borrow())
}
}
impl MachO_MachHeader {
pub fn cputype(&self) -> Ref<'_, MachO_CpuType> {
self.cputype.borrow()
}
}
impl MachO_MachHeader {
pub fn cpusubtype(&self) -> Ref<'_, u32> {
self.cpusubtype.borrow()
}
}
impl MachO_MachHeader {
pub fn filetype(&self) -> Ref<'_, MachO_FileType> {
self.filetype.borrow()
}
}
impl MachO_MachHeader {
pub fn ncmds(&self) -> Ref<'_, u32> {
self.ncmds.borrow()
}
}
impl MachO_MachHeader {
pub fn sizeofcmds(&self) -> Ref<'_, u32> {
self.sizeofcmds.borrow()
}
}
impl MachO_MachHeader {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_MachHeader {
pub fn reserved(&self) -> Ref<'_, u32> {
self.reserved.borrow()
}
}
impl MachO_MachHeader {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_MachoFlags {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_MachHeader>,
pub _self: SharedType<Self>,
value: RefCell<u32>,
_io: RefCell<BytesReader>,
f_all_mods_bound: Cell<bool>,
all_mods_bound: RefCell<bool>,
f_allow_stack_execution: Cell<bool>,
allow_stack_execution: RefCell<bool>,
f_app_extension_safe: Cell<bool>,
app_extension_safe: RefCell<bool>,
f_bind_at_load: Cell<bool>,
bind_at_load: RefCell<bool>,
f_binds_to_weak: Cell<bool>,
binds_to_weak: RefCell<bool>,
f_canonical: Cell<bool>,
canonical: RefCell<bool>,
f_dead_strippable_dylib: Cell<bool>,
dead_strippable_dylib: RefCell<bool>,
f_dyld_link: Cell<bool>,
dyld_link: RefCell<bool>,
f_force_flat: Cell<bool>,
force_flat: RefCell<bool>,
f_has_tlv_descriptors: Cell<bool>,
has_tlv_descriptors: RefCell<bool>,
f_incr_link: Cell<bool>,
incr_link: RefCell<bool>,
f_lazy_init: Cell<bool>,
lazy_init: RefCell<bool>,
f_no_fix_prebinding: Cell<bool>,
no_fix_prebinding: RefCell<bool>,
f_no_heap_execution: Cell<bool>,
no_heap_execution: RefCell<bool>,
f_no_multi_defs: Cell<bool>,
no_multi_defs: RefCell<bool>,
f_no_reexported_dylibs: Cell<bool>,
no_reexported_dylibs: RefCell<bool>,
f_no_undefs: Cell<bool>,
no_undefs: RefCell<bool>,
f_pie: Cell<bool>,
pie: RefCell<bool>,
f_prebindable: Cell<bool>,
prebindable: RefCell<bool>,
f_prebound: Cell<bool>,
prebound: RefCell<bool>,
f_root_safe: Cell<bool>,
root_safe: RefCell<bool>,
f_setuid_safe: Cell<bool>,
setuid_safe: RefCell<bool>,
f_split_segs: Cell<bool>,
split_segs: RefCell<bool>,
f_subsections_via_symbols: Cell<bool>,
subsections_via_symbols: RefCell<bool>,
f_two_level: Cell<bool>,
two_level: RefCell<bool>,
f_weak_defines: Cell<bool>,
weak_defines: RefCell<bool>,
}
impl KStruct for MachO_MachoFlags {
type Root = MachO;
type Parent = MachO_MachHeader;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
Ok(())
}
}
impl MachO_MachoFlags {
pub fn value(&self) -> Ref<'_, u32> {
self.value.borrow()
}
}
impl MachO_MachoFlags {
pub fn set_params(&mut self, value: u32) {
*self.value.borrow_mut() = value;
}
}
impl MachO_MachoFlags {
/**
* indicates that this binary binds to all two-level namespace modules of its dependent libraries. only used when MH_PREBINDABLE and MH_TWOLEVEL are both set.
*/
pub fn all_mods_bound(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_all_mods_bound.get() {
return Ok(self.all_mods_bound.borrow());
}
self.f_all_mods_bound.set(true);
*self.all_mods_bound.borrow_mut() = (((((*self.value() as i32) & (4096 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.all_mods_bound.borrow())
}
/**
* When this bit is set, all stacks in the task will be given stack execution privilege. Only used in MH_EXECUTE filetypes.
*/
pub fn allow_stack_execution(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_allow_stack_execution.get() {
return Ok(self.allow_stack_execution.borrow());
}
self.f_allow_stack_execution.set(true);
*self.allow_stack_execution.borrow_mut() = (((((*self.value() as i32) & (131072 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.allow_stack_execution.borrow())
}
pub fn app_extension_safe(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_app_extension_safe.get() {
return Ok(self.app_extension_safe.borrow());
}
self.f_app_extension_safe.set(true);
*self.app_extension_safe.borrow_mut() = (((((*self.value() as i32) & (33554432 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.app_extension_safe.borrow())
}
/**
* the object file's undefined references are bound by the dynamic linker when loaded.
*/
pub fn bind_at_load(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_bind_at_load.get() {
return Ok(self.bind_at_load.borrow());
}
self.f_bind_at_load.set(true);
*self.bind_at_load.borrow_mut() = (((((*self.value() as u32) & (8 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.bind_at_load.borrow())
}
/**
* the final linked image uses weak symbols
*/
pub fn binds_to_weak(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_binds_to_weak.get() {
return Ok(self.binds_to_weak.borrow());
}
self.f_binds_to_weak.set(true);
*self.binds_to_weak.borrow_mut() = (((((*self.value() as i32) & (65536 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.binds_to_weak.borrow())
}
/**
* the binary has been canonicalized via the unprebind operation
*/
pub fn canonical(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_canonical.get() {
return Ok(self.canonical.borrow());
}
self.f_canonical.set(true);
*self.canonical.borrow_mut() = (((((*self.value() as i32) & (16384 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.canonical.borrow())
}
pub fn dead_strippable_dylib(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_dead_strippable_dylib.get() {
return Ok(self.dead_strippable_dylib.borrow());
}
self.f_dead_strippable_dylib.set(true);
*self.dead_strippable_dylib.borrow_mut() = (((((*self.value() as i32) & (4194304 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.dead_strippable_dylib.borrow())
}
/**
* the object file is input for the dynamic linker and can't be staticly link edited again
*/
pub fn dyld_link(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_dyld_link.get() {
return Ok(self.dyld_link.borrow());
}
self.f_dyld_link.set(true);
*self.dyld_link.borrow_mut() = (((((*self.value() as u32) & (4 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.dyld_link.borrow())
}
/**
* the executable is forcing all images to use flat name space bindings
*/
pub fn force_flat(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_force_flat.get() {
return Ok(self.force_flat.borrow());
}
self.f_force_flat.set(true);
*self.force_flat.borrow_mut() = (((((*self.value() as i32) & (256 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.force_flat.borrow())
}
pub fn has_tlv_descriptors(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_has_tlv_descriptors.get() {
return Ok(self.has_tlv_descriptors.borrow());
}
self.f_has_tlv_descriptors.set(true);
*self.has_tlv_descriptors.borrow_mut() = (((((*self.value() as i32) & (8388608 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.has_tlv_descriptors.borrow())
}
/**
* the object file is the output of an incremental link against a base file and can't be link edited again
*/
pub fn incr_link(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_incr_link.get() {
return Ok(self.incr_link.borrow());
}
self.f_incr_link.set(true);
*self.incr_link.borrow_mut() = (((((*self.value() as u32) & (2 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.incr_link.borrow())
}
/**
* the shared library init routine is to be run lazily via catching memory faults to its writeable segments (obsolete)
*/
pub fn lazy_init(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_lazy_init.get() {
return Ok(self.lazy_init.borrow());
}
self.f_lazy_init.set(true);
*self.lazy_init.borrow_mut() = (((((*self.value() as u32) & (64 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.lazy_init.borrow())
}
/**
* do not have dyld notify the prebinding agent about this executable
*/
pub fn no_fix_prebinding(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_no_fix_prebinding.get() {
return Ok(self.no_fix_prebinding.borrow());
}
self.f_no_fix_prebinding.set(true);
*self.no_fix_prebinding.borrow_mut() = (((((*self.value() as i32) & (1024 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.no_fix_prebinding.borrow())
}
pub fn no_heap_execution(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_no_heap_execution.get() {
return Ok(self.no_heap_execution.borrow());
}
self.f_no_heap_execution.set(true);
*self.no_heap_execution.borrow_mut() = (((((*self.value() as i32) & (16777216 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.no_heap_execution.borrow())
}
/**
* this umbrella guarantees no multiple defintions of symbols in its sub-images so the two-level namespace hints can always be used.
*/
pub fn no_multi_defs(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_no_multi_defs.get() {
return Ok(self.no_multi_defs.borrow());
}
self.f_no_multi_defs.set(true);
*self.no_multi_defs.borrow_mut() = (((((*self.value() as i32) & (512 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.no_multi_defs.borrow())
}
/**
* When this bit is set on a dylib, the static linker does not need to examine dependent dylibs to see if any are re-exported
*/
pub fn no_reexported_dylibs(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_no_reexported_dylibs.get() {
return Ok(self.no_reexported_dylibs.borrow());
}
self.f_no_reexported_dylibs.set(true);
*self.no_reexported_dylibs.borrow_mut() = (((((*self.value() as i32) & (1048576 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.no_reexported_dylibs.borrow())
}
/**
* the object file has no undefined references
*/
pub fn no_undefs(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_no_undefs.get() {
return Ok(self.no_undefs.borrow());
}
self.f_no_undefs.set(true);
*self.no_undefs.borrow_mut() = (((((*self.value() as u32) & (1 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.no_undefs.borrow())
}
/**
* When this bit is set, the OS will load the main executable at a random address. Only used in MH_EXECUTE filetypes.
*/
pub fn pie(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_pie.get() {
return Ok(self.pie.borrow());
}
self.f_pie.set(true);
*self.pie.borrow_mut() = (((((*self.value() as i32) & (2097152 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.pie.borrow())
}
/**
* the binary is not prebound but can have its prebinding redone. only used when MH_PREBOUND is not set.
*/
pub fn prebindable(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_prebindable.get() {
return Ok(self.prebindable.borrow());
}
self.f_prebindable.set(true);
*self.prebindable.borrow_mut() = (((((*self.value() as i32) & (2048 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.prebindable.borrow())
}
/**
* the file has its dynamic undefined references prebound.
*/
pub fn prebound(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_prebound.get() {
return Ok(self.prebound.borrow());
}
self.f_prebound.set(true);
*self.prebound.borrow_mut() = (((((*self.value() as u32) & (16 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.prebound.borrow())
}
/**
* When this bit is set, the binary declares it is safe for use in processes with uid zero
*/
pub fn root_safe(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_root_safe.get() {
return Ok(self.root_safe.borrow());
}
self.f_root_safe.set(true);
*self.root_safe.borrow_mut() = (((((*self.value() as i32) & (262144 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.root_safe.borrow())
}
/**
* When this bit is set, the binary declares it is safe for use in processes when issetugid() is true
*/
pub fn setuid_safe(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_setuid_safe.get() {
return Ok(self.setuid_safe.borrow());
}
self.f_setuid_safe.set(true);
*self.setuid_safe.borrow_mut() = (((((*self.value() as i32) & (524288 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.setuid_safe.borrow())
}
/**
* the file has its read-only and read-write segments split
*/
pub fn split_segs(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_split_segs.get() {
return Ok(self.split_segs.borrow());
}
self.f_split_segs.set(true);
*self.split_segs.borrow_mut() = (((((*self.value() as u32) & (32 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.split_segs.borrow())
}
/**
* safe to divide up the sections into sub-sections via symbols for dead code stripping
*/
pub fn subsections_via_symbols(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_subsections_via_symbols.get() {
return Ok(self.subsections_via_symbols.borrow());
}
self.f_subsections_via_symbols.set(true);
*self.subsections_via_symbols.borrow_mut() = (((((*self.value() as i32) & (8192 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.subsections_via_symbols.borrow())
}
/**
* the image is using two-level name space bindings
*/
pub fn two_level(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_two_level.get() {
return Ok(self.two_level.borrow());
}
self.f_two_level.set(true);
*self.two_level.borrow_mut() = (((((*self.value() as u32) & (128 as u32)) as i32) != (0 as i32))) as bool;
Ok(self.two_level.borrow())
}
/**
* the final linked image contains external weak symbols
*/
pub fn weak_defines(
&self
) -> KResult<Ref<'_, bool>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_weak_defines.get() {
return Ok(self.weak_defines.borrow());
}
self.f_weak_defines.set(true);
*self.weak_defines.borrow_mut() = (((((*self.value() as i32) & (32768 as i32)) as i32) != (0 as i32))) as bool;
Ok(self.weak_defines.borrow())
}
}
impl MachO_MachoFlags {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_RoutinesCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
init_address: RefCell<u32>,
init_module: RefCell<u32>,
reserved: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_RoutinesCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.init_address.borrow_mut() = _io.read_u4le()?.into();
*self_rc.init_module.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved.borrow_mut() = _io.read_bytes(24 as usize)?.into();
Ok(())
}
}
impl MachO_RoutinesCommand {
}
impl MachO_RoutinesCommand {
pub fn init_address(&self) -> Ref<'_, u32> {
self.init_address.borrow()
}
}
impl MachO_RoutinesCommand {
pub fn init_module(&self) -> Ref<'_, u32> {
self.init_module.borrow()
}
}
impl MachO_RoutinesCommand {
pub fn reserved(&self) -> Ref<'_, Vec<u8>> {
self.reserved.borrow()
}
}
impl MachO_RoutinesCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_RoutinesCommand64 {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
init_address: RefCell<u64>,
init_module: RefCell<u64>,
reserved: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_RoutinesCommand64 {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.init_address.borrow_mut() = _io.read_u8le()?.into();
*self_rc.init_module.borrow_mut() = _io.read_u8le()?.into();
*self_rc.reserved.borrow_mut() = _io.read_bytes(48 as usize)?.into();
Ok(())
}
}
impl MachO_RoutinesCommand64 {
}
impl MachO_RoutinesCommand64 {
pub fn init_address(&self) -> Ref<'_, u64> {
self.init_address.borrow()
}
}
impl MachO_RoutinesCommand64 {
pub fn init_module(&self) -> Ref<'_, u64> {
self.init_module.borrow()
}
}
impl MachO_RoutinesCommand64 {
pub fn reserved(&self) -> Ref<'_, Vec<u8>> {
self.reserved.borrow()
}
}
impl MachO_RoutinesCommand64 {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_RpathCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
path_offset: RefCell<u32>,
path: RefCell<String>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_RpathCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.path_offset.borrow_mut() = _io.read_u4le()?.into();
*self_rc.path.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
Ok(())
}
}
impl MachO_RpathCommand {
}
impl MachO_RpathCommand {
pub fn path_offset(&self) -> Ref<'_, u32> {
self.path_offset.borrow()
}
}
impl MachO_RpathCommand {
pub fn path(&self) -> Ref<'_, String> {
self.path.borrow()
}
}
impl MachO_RpathCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
segname: RefCell<String>,
vmaddr: RefCell<u32>,
vmsize: RefCell<u32>,
fileoff: RefCell<u32>,
filesize: RefCell<u32>,
maxprot: RefCell<OptRc<MachO_VmProt>>,
initprot: RefCell<OptRc<MachO_VmProt>>,
nsects: RefCell<u32>,
flags: RefCell<u32>,
sections: RefCell<Vec<OptRc<MachO_SegmentCommand_Section>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.segname.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.vmaddr.borrow_mut() = _io.read_u4le()?.into();
*self_rc.vmsize.borrow_mut() = _io.read_u4le()?.into();
*self_rc.fileoff.borrow_mut() = _io.read_u4le()?.into();
*self_rc.filesize.borrow_mut() = _io.read_u4le()?.into();
let t = Self::read_into::<_, MachO_VmProt>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.maxprot.borrow_mut() = t;
let t = Self::read_into::<_, MachO_VmProt>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.initprot.borrow_mut() = t;
*self_rc.nsects.borrow_mut() = _io.read_u4le()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4le()?.into();
*self_rc.sections.borrow_mut() = Vec::new();
let l_sections = *self_rc.nsects();
for _i in 0..l_sections {
let t = Self::read_into::<_, MachO_SegmentCommand_Section>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.sections.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO_SegmentCommand {
}
impl MachO_SegmentCommand {
pub fn segname(&self) -> Ref<'_, String> {
self.segname.borrow()
}
}
impl MachO_SegmentCommand {
pub fn vmaddr(&self) -> Ref<'_, u32> {
self.vmaddr.borrow()
}
}
impl MachO_SegmentCommand {
pub fn vmsize(&self) -> Ref<'_, u32> {
self.vmsize.borrow()
}
}
impl MachO_SegmentCommand {
pub fn fileoff(&self) -> Ref<'_, u32> {
self.fileoff.borrow()
}
}
impl MachO_SegmentCommand {
pub fn filesize(&self) -> Ref<'_, u32> {
self.filesize.borrow()
}
}
impl MachO_SegmentCommand {
pub fn maxprot(&self) -> Ref<'_, OptRc<MachO_VmProt>> {
self.maxprot.borrow()
}
}
impl MachO_SegmentCommand {
pub fn initprot(&self) -> Ref<'_, OptRc<MachO_VmProt>> {
self.initprot.borrow()
}
}
impl MachO_SegmentCommand {
pub fn nsects(&self) -> Ref<'_, u32> {
self.nsects.borrow()
}
}
impl MachO_SegmentCommand {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_SegmentCommand {
pub fn sections(&self) -> Ref<'_, Vec<OptRc<MachO_SegmentCommand_Section>>> {
self.sections.borrow()
}
}
impl MachO_SegmentCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand_Section {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand>,
pub _self: SharedType<Self>,
sect_name: RefCell<String>,
seg_name: RefCell<String>,
addr: RefCell<u32>,
size: RefCell<u32>,
offset: RefCell<u32>,
align: RefCell<u32>,
reloff: RefCell<u32>,
nreloc: RefCell<u32>,
flags: RefCell<u32>,
reserved1: RefCell<u32>,
reserved2: RefCell<u32>,
_io: RefCell<BytesReader>,
f_data: Cell<bool>,
data: RefCell<Vec<u8>>,
}
impl KStruct for MachO_SegmentCommand_Section {
type Root = MachO;
type Parent = MachO_SegmentCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.sect_name.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.seg_name.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.addr.borrow_mut() = _io.read_u4le()?.into();
*self_rc.size.borrow_mut() = _io.read_u4le()?.into();
*self_rc.offset.borrow_mut() = _io.read_u4le()?.into();
*self_rc.align.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reloff.borrow_mut() = _io.read_u4le()?.into();
*self_rc.nreloc.borrow_mut() = _io.read_u4le()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved1.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved2.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_SegmentCommand_Section {
pub fn data(
&self
) -> KResult<Ref<'_, Vec<u8>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_data.get() {
return Ok(self.data.borrow());
}
self.f_data.set(true);
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.offset() as usize)?;
*self.data.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
io.seek(_pos)?;
Ok(self.data.borrow())
}
}
impl MachO_SegmentCommand_Section {
pub fn sect_name(&self) -> Ref<'_, String> {
self.sect_name.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn seg_name(&self) -> Ref<'_, String> {
self.seg_name.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn addr(&self) -> Ref<'_, u32> {
self.addr.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn size(&self) -> Ref<'_, u32> {
self.size.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn offset(&self) -> Ref<'_, u32> {
self.offset.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn align(&self) -> Ref<'_, u32> {
self.align.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn reloff(&self) -> Ref<'_, u32> {
self.reloff.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn nreloc(&self) -> Ref<'_, u32> {
self.nreloc.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn reserved1(&self) -> Ref<'_, u32> {
self.reserved1.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn reserved2(&self) -> Ref<'_, u32> {
self.reserved2.borrow()
}
}
impl MachO_SegmentCommand_Section {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64 {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
segname: RefCell<String>,
vmaddr: RefCell<u64>,
vmsize: RefCell<u64>,
fileoff: RefCell<u64>,
filesize: RefCell<u64>,
maxprot: RefCell<OptRc<MachO_VmProt>>,
initprot: RefCell<OptRc<MachO_VmProt>>,
nsects: RefCell<u32>,
flags: RefCell<u32>,
sections: RefCell<Vec<OptRc<MachO_SegmentCommand64_Section64>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64 {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.segname.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.vmaddr.borrow_mut() = _io.read_u8le()?.into();
*self_rc.vmsize.borrow_mut() = _io.read_u8le()?.into();
*self_rc.fileoff.borrow_mut() = _io.read_u8le()?.into();
*self_rc.filesize.borrow_mut() = _io.read_u8le()?.into();
let t = Self::read_into::<_, MachO_VmProt>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.maxprot.borrow_mut() = t;
let t = Self::read_into::<_, MachO_VmProt>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.initprot.borrow_mut() = t;
*self_rc.nsects.borrow_mut() = _io.read_u4le()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4le()?.into();
*self_rc.sections.borrow_mut() = Vec::new();
let l_sections = *self_rc.nsects();
for _i in 0..l_sections {
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.sections.borrow_mut().push(t);
}
Ok(())
}
}
impl MachO_SegmentCommand64 {
}
impl MachO_SegmentCommand64 {
pub fn segname(&self) -> Ref<'_, String> {
self.segname.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn vmaddr(&self) -> Ref<'_, u64> {
self.vmaddr.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn vmsize(&self) -> Ref<'_, u64> {
self.vmsize.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn fileoff(&self) -> Ref<'_, u64> {
self.fileoff.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn filesize(&self) -> Ref<'_, u64> {
self.filesize.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn maxprot(&self) -> Ref<'_, OptRc<MachO_VmProt>> {
self.maxprot.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn initprot(&self) -> Ref<'_, OptRc<MachO_VmProt>> {
self.initprot.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn nsects(&self) -> Ref<'_, u32> {
self.nsects.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn sections(&self) -> Ref<'_, Vec<OptRc<MachO_SegmentCommand64_Section64>>> {
self.sections.borrow()
}
}
impl MachO_SegmentCommand64 {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64 {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64>,
pub _self: SharedType<Self>,
sect_name: RefCell<String>,
seg_name: RefCell<String>,
addr: RefCell<u64>,
size: RefCell<u64>,
offset: RefCell<u32>,
align: RefCell<u32>,
reloff: RefCell<u32>,
nreloc: RefCell<u32>,
flags: RefCell<u32>,
reserved1: RefCell<u32>,
reserved2: RefCell<u32>,
reserved3: RefCell<u32>,
_io: RefCell<BytesReader>,
data_raw: RefCell<Vec<u8>>,
f_data: Cell<bool>,
data: RefCell<Option<MachO_SegmentCommand64_Section64_Data>>,
}
#[derive(Debug, Clone)]
pub enum MachO_SegmentCommand64_Section64_Data {
MachO_SegmentCommand64_Section64_StringList(OptRc<MachO_SegmentCommand64_Section64_StringList>),
Bytes(Vec<u8>),
MachO_SegmentCommand64_Section64_CfStringList(OptRc<MachO_SegmentCommand64_Section64_CfStringList>),
MachO_SegmentCommand64_Section64_PointerList(OptRc<MachO_SegmentCommand64_Section64_PointerList>),
MachO_SegmentCommand64_Section64_EhFrame(OptRc<MachO_SegmentCommand64_Section64_EhFrame>),
}
impl From<&MachO_SegmentCommand64_Section64_Data> for OptRc<MachO_SegmentCommand64_Section64_StringList> {
fn from(v: &MachO_SegmentCommand64_Section64_Data) -> Self {
if let MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_StringList(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_StringList, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64_Section64_StringList>> for MachO_SegmentCommand64_Section64_Data {
fn from(v: OptRc<MachO_SegmentCommand64_Section64_StringList>) -> Self {
Self::MachO_SegmentCommand64_Section64_StringList(v)
}
}
impl From<&MachO_SegmentCommand64_Section64_Data> for Vec<u8> {
fn from(v: &MachO_SegmentCommand64_Section64_Data) -> Self {
if let MachO_SegmentCommand64_Section64_Data::Bytes(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_Data::Bytes, got {:?}", v)
}
}
impl From<Vec<u8>> for MachO_SegmentCommand64_Section64_Data {
fn from(v: Vec<u8>) -> Self {
Self::Bytes(v)
}
}
impl From<&MachO_SegmentCommand64_Section64_Data> for OptRc<MachO_SegmentCommand64_Section64_CfStringList> {
fn from(v: &MachO_SegmentCommand64_Section64_Data) -> Self {
if let MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_CfStringList(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_CfStringList, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64_Section64_CfStringList>> for MachO_SegmentCommand64_Section64_Data {
fn from(v: OptRc<MachO_SegmentCommand64_Section64_CfStringList>) -> Self {
Self::MachO_SegmentCommand64_Section64_CfStringList(v)
}
}
impl From<&MachO_SegmentCommand64_Section64_Data> for OptRc<MachO_SegmentCommand64_Section64_PointerList> {
fn from(v: &MachO_SegmentCommand64_Section64_Data) -> Self {
if let MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_PointerList(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_PointerList, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64_Section64_PointerList>> for MachO_SegmentCommand64_Section64_Data {
fn from(v: OptRc<MachO_SegmentCommand64_Section64_PointerList>) -> Self {
Self::MachO_SegmentCommand64_Section64_PointerList(v)
}
}
impl From<&MachO_SegmentCommand64_Section64_Data> for OptRc<MachO_SegmentCommand64_Section64_EhFrame> {
fn from(v: &MachO_SegmentCommand64_Section64_Data) -> Self {
if let MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_EhFrame(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_Data::MachO_SegmentCommand64_Section64_EhFrame, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64_Section64_EhFrame>> for MachO_SegmentCommand64_Section64_Data {
fn from(v: OptRc<MachO_SegmentCommand64_Section64_EhFrame>) -> Self {
Self::MachO_SegmentCommand64_Section64_EhFrame(v)
}
}
impl KStruct for MachO_SegmentCommand64_Section64 {
type Root = MachO;
type Parent = MachO_SegmentCommand64;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.sect_name.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.seg_name.borrow_mut() = bytes_to_str(&bytes_strip_right(&_io.read_bytes(16 as usize)?.into(), 0).into(), "ASCII")?;
*self_rc.addr.borrow_mut() = _io.read_u8le()?.into();
*self_rc.size.borrow_mut() = _io.read_u8le()?.into();
*self_rc.offset.borrow_mut() = _io.read_u4le()?.into();
*self_rc.align.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reloff.borrow_mut() = _io.read_u4le()?.into();
*self_rc.nreloc.borrow_mut() = _io.read_u4le()?.into();
*self_rc.flags.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved1.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved2.borrow_mut() = _io.read_u4le()?.into();
*self_rc.reserved3.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn data(
&self
) -> KResult<Ref<'_, Option<MachO_SegmentCommand64_Section64_Data>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_data.get() {
return Ok(self.data.borrow());
}
self.f_data.set(true);
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.offset() as usize)?;
{
let on = self.sect_name();
if *on == "__cfstring" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_CfStringList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__cstring" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_StringList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__eh_frame" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_EhFrame>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__got" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__la_symbol_ptr" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__nl_symbol_ptr" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_classlist" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_classname" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_StringList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_classrefs" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_imageinfo" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_methname" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_StringList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_methtype" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_StringList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_nlclslist" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_protolist" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_protorefs" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_selrefs" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else if *on == "__objc_superrefs" {
*self.data_raw.borrow_mut() = io.read_bytes(*self.size() as usize)?.into();
let data_raw = self.data_raw.borrow();
let _t_data_raw_io = BytesReader::from(data_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_PointerList>(&_t_data_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.data.borrow_mut() = Some(t);
}
else {
*self.data.borrow_mut() = Some(io.read_bytes(*self.size() as usize)?.into());
}
}
io.seek(_pos)?;
Ok(self.data.borrow())
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn sect_name(&self) -> Ref<'_, String> {
self.sect_name.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn seg_name(&self) -> Ref<'_, String> {
self.seg_name.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn addr(&self) -> Ref<'_, u64> {
self.addr.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn size(&self) -> Ref<'_, u64> {
self.size.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn offset(&self) -> Ref<'_, u32> {
self.offset.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn align(&self) -> Ref<'_, u32> {
self.align.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn reloff(&self) -> Ref<'_, u32> {
self.reloff.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn nreloc(&self) -> Ref<'_, u32> {
self.nreloc.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn flags(&self) -> Ref<'_, u32> {
self.flags.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn reserved1(&self) -> Ref<'_, u32> {
self.reserved1.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn reserved2(&self) -> Ref<'_, u32> {
self.reserved2.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn reserved3(&self) -> Ref<'_, u32> {
self.reserved3.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_SegmentCommand64_Section64 {
pub fn data_raw(&self) -> Ref<'_, Vec<u8>> {
self.data_raw.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_CfString {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64_CfStringList>,
pub _self: SharedType<Self>,
isa: RefCell<u64>,
info: RefCell<u64>,
data: RefCell<u64>,
length: RefCell<u64>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_CfString {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64_CfStringList;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.isa.borrow_mut() = _io.read_u8le()?.into();
*self_rc.info.borrow_mut() = _io.read_u8le()?.into();
*self_rc.data.borrow_mut() = Some(_io.read_u8le()?.into());
*self_rc.length.borrow_mut() = _io.read_u8le()?.into();
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_CfString {
}
impl MachO_SegmentCommand64_Section64_CfString {
pub fn isa(&self) -> Ref<'_, u64> {
self.isa.borrow()
}
}
impl MachO_SegmentCommand64_Section64_CfString {
pub fn info(&self) -> Ref<'_, u64> {
self.info.borrow()
}
}
impl MachO_SegmentCommand64_Section64_CfString {
pub fn data(&self) -> Ref<'_, u64> {
self.data.borrow()
}
}
impl MachO_SegmentCommand64_Section64_CfString {
pub fn length(&self) -> Ref<'_, u64> {
self.length.borrow()
}
}
impl MachO_SegmentCommand64_Section64_CfString {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_CfStringList {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64>,
pub _self: SharedType<Self>,
items: RefCell<Vec<OptRc<MachO_SegmentCommand64_Section64_CfString>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_CfStringList {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while !_io.is_eof() {
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64_CfString>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.items.borrow_mut().push(t);
_i += 1;
}
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_CfStringList {
}
impl MachO_SegmentCommand64_Section64_CfStringList {
pub fn items(&self) -> Ref<'_, Vec<OptRc<MachO_SegmentCommand64_Section64_CfString>>> {
self.items.borrow()
}
}
impl MachO_SegmentCommand64_Section64_CfStringList {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_EhFrame {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64>,
pub _self: SharedType<Self>,
items: RefCell<Vec<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem>>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_EhFrame {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while !_io.is_eof() {
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64_EhFrameItem>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
self_rc.items.borrow_mut().push(t);
_i += 1;
}
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_EhFrame {
}
impl MachO_SegmentCommand64_Section64_EhFrame {
pub fn items(&self) -> Ref<'_, Vec<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem>>> {
self.items.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrame {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_EhFrameItem {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64_EhFrame>,
pub _self: SharedType<Self>,
length: RefCell<u32>,
length64: RefCell<u64>,
id: RefCell<u32>,
body: RefCell<Option<MachO_SegmentCommand64_Section64_EhFrameItem_Body>>,
_io: RefCell<BytesReader>,
body_raw: RefCell<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub enum MachO_SegmentCommand64_Section64_EhFrameItem_Body {
MachO_SegmentCommand64_Section64_EhFrameItem_Cie(OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_Cie>),
Bytes(Vec<u8>),
}
impl From<&MachO_SegmentCommand64_Section64_EhFrameItem_Body> for OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_Cie> {
fn from(v: &MachO_SegmentCommand64_Section64_EhFrameItem_Body) -> Self {
if let MachO_SegmentCommand64_Section64_EhFrameItem_Body::MachO_SegmentCommand64_Section64_EhFrameItem_Cie(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_EhFrameItem_Body::MachO_SegmentCommand64_Section64_EhFrameItem_Cie, got {:?}", v)
}
}
impl From<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_Cie>> for MachO_SegmentCommand64_Section64_EhFrameItem_Body {
fn from(v: OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_Cie>) -> Self {
Self::MachO_SegmentCommand64_Section64_EhFrameItem_Cie(v)
}
}
impl From<&MachO_SegmentCommand64_Section64_EhFrameItem_Body> for Vec<u8> {
fn from(v: &MachO_SegmentCommand64_Section64_EhFrameItem_Body) -> Self {
if let MachO_SegmentCommand64_Section64_EhFrameItem_Body::Bytes(x) = v {
return x.clone();
}
panic!("expected MachO_SegmentCommand64_Section64_EhFrameItem_Body::Bytes, got {:?}", v)
}
}
impl From<Vec<u8>> for MachO_SegmentCommand64_Section64_EhFrameItem_Body {
fn from(v: Vec<u8>) -> Self {
Self::Bytes(v)
}
}
impl KStruct for MachO_SegmentCommand64_Section64_EhFrameItem {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64_EhFrame;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.length.borrow_mut() = _io.read_u4le()?.into();
if ((*self_rc.length() as i32) == (4294967295 as i32)) {
*self_rc.length64.borrow_mut() = _io.read_u8le()?.into();
}
*self_rc.id.borrow_mut() = _io.read_u4le()?.into();
if ((*self_rc.length() as u32) > (0 as u32)) {
match *self_rc.id() {
0 => {
*self_rc.body_raw.borrow_mut() = _io.read_bytes(((*self_rc.length() as u32) - (4 as u32)) as usize)?.into();
let body_raw = self_rc.body_raw.borrow();
let _t_body_raw_io = BytesReader::from(body_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SegmentCommand64_Section64_EhFrameItem_Cie>(&_t_body_raw_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.body.borrow_mut() = Some(t);
}
_ => {
*self_rc.body.borrow_mut() = Some(_io.read_bytes(((*self_rc.length() as u32) - (4 as u32)) as usize)?.into());
}
}
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn length(&self) -> Ref<'_, u32> {
self.length.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn length64(&self) -> Ref<'_, u64> {
self.length64.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn id(&self) -> Ref<'_, u32> {
self.id.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn body(&self) -> Ref<'_, Option<MachO_SegmentCommand64_Section64_EhFrameItem_Body>> {
self.body.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem {
pub fn body_raw(&self) -> Ref<'_, Vec<u8>> {
self.body_raw.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64_EhFrameItem_Cie>,
pub _self: SharedType<Self>,
length: RefCell<OptRc<MachO_Uleb128>>,
fde_pointer_encoding: RefCell<u8>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64_EhFrameItem_Cie;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.length.borrow_mut() = t;
if ((*_prc.as_ref().unwrap().aug_str().next().chr() as u8) == (82 as u8)) {
*self_rc.fde_pointer_encoding.borrow_mut() = _io.read_u1()?.into();
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
pub fn length(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.length.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
pub fn fde_pointer_encoding(&self) -> Ref<'_, u8> {
self.fde_pointer_encoding.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
chr: RefCell<u8>,
next: RefCell<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.chr.borrow_mut() = _io.read_u1()?.into();
if ((*self_rc.chr() as u8) != (0 as u8)) {
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.next.borrow_mut() = t;
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
pub fn chr(&self) -> Ref<'_, u8> {
self.chr.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
pub fn next(&self) -> Ref<'_, OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>> {
self.next.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_CharChain {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64_EhFrameItem>,
pub _self: SharedType<Self>,
version: RefCell<u8>,
aug_str: RefCell<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>>,
code_alignment_factor: RefCell<OptRc<MachO_Uleb128>>,
data_alignment_factor: RefCell<OptRc<MachO_Uleb128>>,
return_address_register: RefCell<u8>,
augmentation: RefCell<OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64_EhFrameItem;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.version.borrow_mut() = _io.read_u1()?.into();
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.aug_str.borrow_mut() = t;
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.code_alignment_factor.borrow_mut() = t;
let t = Self::read_into::<_, MachO_Uleb128>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.data_alignment_factor.borrow_mut() = t;
*self_rc.return_address_register.borrow_mut() = _io.read_u1()?.into();
if ((*self_rc.aug_str().chr() as u8) == (122 as u8)) {
let t = Self::read_into::<_, MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.augmentation.borrow_mut() = t;
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn version(&self) -> Ref<'_, u8> {
self.version.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn aug_str(&self) -> Ref<'_, OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_CharChain>> {
self.aug_str.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn code_alignment_factor(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.code_alignment_factor.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn data_alignment_factor(&self) -> Ref<'_, OptRc<MachO_Uleb128>> {
self.data_alignment_factor.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn return_address_register(&self) -> Ref<'_, u8> {
self.return_address_register.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn augmentation(&self) -> Ref<'_, OptRc<MachO_SegmentCommand64_Section64_EhFrameItem_AugmentationEntry>> {
self.augmentation.borrow()
}
}
impl MachO_SegmentCommand64_Section64_EhFrameItem_Cie {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_PointerList {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64>,
pub _self: SharedType<Self>,
items: RefCell<Vec<u64>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_PointerList {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while !_io.is_eof() {
self_rc.items.borrow_mut().push(_io.read_u8le()?.into());
_i += 1;
}
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_PointerList {
}
impl MachO_SegmentCommand64_Section64_PointerList {
pub fn items(&self) -> Ref<'_, Vec<u64>> {
self.items.borrow()
}
}
impl MachO_SegmentCommand64_Section64_PointerList {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SegmentCommand64_Section64_StringList {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SegmentCommand64_Section64>,
pub _self: SharedType<Self>,
strings: RefCell<Vec<String>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SegmentCommand64_Section64_StringList {
type Root = MachO;
type Parent = MachO_SegmentCommand64_Section64;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.strings.borrow_mut() = Vec::new();
{
let mut _i = 0;
while !_io.is_eof() {
self_rc.strings.borrow_mut().push(bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "ASCII")?);
_i += 1;
}
}
Ok(())
}
}
impl MachO_SegmentCommand64_Section64_StringList {
}
impl MachO_SegmentCommand64_Section64_StringList {
pub fn strings(&self) -> Ref<'_, Vec<String>> {
self.strings.borrow()
}
}
impl MachO_SegmentCommand64_Section64_StringList {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SourceVersionCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
version: RefCell<u64>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SourceVersionCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.version.borrow_mut() = _io.read_u8le()?.into();
Ok(())
}
}
impl MachO_SourceVersionCommand {
}
impl MachO_SourceVersionCommand {
pub fn version(&self) -> Ref<'_, u64> {
self.version.borrow()
}
}
impl MachO_SourceVersionCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SubCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
name: RefCell<OptRc<MachO_LcStr>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SubCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_LcStr>(&*_io, Some(self_rc._root.clone()), None)?.into();
*self_rc.name.borrow_mut() = t;
Ok(())
}
}
impl MachO_SubCommand {
}
impl MachO_SubCommand {
pub fn name(&self) -> Ref<'_, OptRc<MachO_LcStr>> {
self.name.borrow()
}
}
impl MachO_SubCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SymtabCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
sym_off: RefCell<u32>,
n_syms: RefCell<u32>,
str_off: RefCell<u32>,
str_size: RefCell<u32>,
_io: RefCell<BytesReader>,
strs_raw: RefCell<Vec<u8>>,
f_strs: Cell<bool>,
strs: RefCell<OptRc<MachO_SymtabCommand_StrTable>>,
f_symbols: Cell<bool>,
symbols: RefCell<Vec<MachO_SymtabCommand_Symbols>>,
}
impl KStruct for MachO_SymtabCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.sym_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.n_syms.borrow_mut() = _io.read_u4le()?.into();
*self_rc.str_off.borrow_mut() = _io.read_u4le()?.into();
*self_rc.str_size.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_SymtabCommand {
pub fn strs(
&self
) -> KResult<Ref<'_, OptRc<MachO_SymtabCommand_StrTable>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_strs.get() {
return Ok(self.strs.borrow());
}
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.str_off() as usize)?;
*self.strs_raw.borrow_mut() = io.read_bytes(*self.str_size() as usize)?.into();
let strs_raw = self.strs_raw.borrow();
let _t_strs_raw_io = BytesReader::from(strs_raw.clone());
let t = Self::read_into::<BytesReader, MachO_SymtabCommand_StrTable>(&_t_strs_raw_io, Some(self._root.clone()), Some(self._self.clone()))?.into();
*self.strs.borrow_mut() = t;
io.seek(_pos)?;
Ok(self.strs.borrow())
}
pub fn symbols(
&self
) -> KResult<Ref<'_, Vec<MachO_SymtabCommand_Symbols>>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_symbols.get() {
return Ok(self.symbols.borrow());
}
self.f_symbols.set(true);
let io = Clone::clone(&*_r._io());
let _pos = io.pos();
io.seek(*self.sym_off() as usize)?;
*self.symbols.borrow_mut() = Vec::new();
let l_symbols = *self.n_syms();
for _i in 0..l_symbols {
match *_r.magic() {
MachO_MagicType::MachoBeX64 => {
let t = Self::read_into::<BytesReader, MachO_SymtabCommand_Nlist64>(&io, Some(self._root.clone()), Some(self._self.clone()))?.into();
self.symbols.borrow_mut().push(t);
}
MachO_MagicType::MachoBeX86 => {
let t = Self::read_into::<BytesReader, MachO_SymtabCommand_Nlist>(&io, Some(self._root.clone()), Some(self._self.clone()))?.into();
self.symbols.borrow_mut().push(t);
}
MachO_MagicType::MachoLeX64 => {
let t = Self::read_into::<BytesReader, MachO_SymtabCommand_Nlist64>(&io, Some(self._root.clone()), Some(self._self.clone()))?.into();
self.symbols.borrow_mut().push(t);
}
MachO_MagicType::MachoLeX86 => {
let t = Self::read_into::<BytesReader, MachO_SymtabCommand_Nlist>(&io, Some(self._root.clone()), Some(self._self.clone()))?.into();
self.symbols.borrow_mut().push(t);
}
_ => {}
}
}
io.seek(_pos)?;
Ok(self.symbols.borrow())
}
}
impl MachO_SymtabCommand {
pub fn sym_off(&self) -> Ref<'_, u32> {
self.sym_off.borrow()
}
}
impl MachO_SymtabCommand {
pub fn n_syms(&self) -> Ref<'_, u32> {
self.n_syms.borrow()
}
}
impl MachO_SymtabCommand {
pub fn str_off(&self) -> Ref<'_, u32> {
self.str_off.borrow()
}
}
impl MachO_SymtabCommand {
pub fn str_size(&self) -> Ref<'_, u32> {
self.str_size.borrow()
}
}
impl MachO_SymtabCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
impl MachO_SymtabCommand {
pub fn strs_raw(&self) -> Ref<'_, Vec<u8>> {
self.strs_raw.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SymtabCommand_Nlist {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SymtabCommand>,
pub _self: SharedType<Self>,
un: RefCell<u32>,
type: RefCell<u8>,
sect: RefCell<u8>,
desc: RefCell<u16>,
value: RefCell<u32>,
_io: RefCell<BytesReader>,
f_name: Cell<bool>,
name: RefCell<String>,
}
impl KStruct for MachO_SymtabCommand_Nlist {
type Root = MachO;
type Parent = MachO_SymtabCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.un.borrow_mut() = _io.read_u4le()?.into();
*self_rc.type.borrow_mut() = _io.read_u1()?.into();
*self_rc.sect.borrow_mut() = _io.read_u1()?.into();
*self_rc.desc.borrow_mut() = _io.read_u2le()?.into();
*self_rc.value.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_SymtabCommand_Nlist {
pub fn name(
&self
) -> KResult<Ref<'_, String>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_name.get() {
return Ok(self.name.borrow());
}
self.f_name.set(true);
if ((*self.un() as u32) != (0 as u32)) {
let _pos = _io.pos();
_io.seek(((*_prc.as_ref().unwrap().str_off() as u32) + (*self.un() as u32)) as usize)?;
*self.name.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
_io.seek(_pos)?;
}
Ok(self.name.borrow())
}
}
impl MachO_SymtabCommand_Nlist {
pub fn un(&self) -> Ref<'_, u32> {
self.un.borrow()
}
}
impl MachO_SymtabCommand_Nlist {
pub fn type(&self) -> Ref<'_, u8> {
self.type.borrow()
}
}
impl MachO_SymtabCommand_Nlist {
pub fn sect(&self) -> Ref<'_, u8> {
self.sect.borrow()
}
}
impl MachO_SymtabCommand_Nlist {
pub fn desc(&self) -> Ref<'_, u16> {
self.desc.borrow()
}
}
impl MachO_SymtabCommand_Nlist {
pub fn value(&self) -> Ref<'_, u32> {
self.value.borrow()
}
}
impl MachO_SymtabCommand_Nlist {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SymtabCommand_Nlist64 {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SymtabCommand>,
pub _self: SharedType<Self>,
un: RefCell<u32>,
type: RefCell<u8>,
sect: RefCell<u8>,
desc: RefCell<u16>,
value: RefCell<u64>,
_io: RefCell<BytesReader>,
f_name: Cell<bool>,
name: RefCell<String>,
}
impl KStruct for MachO_SymtabCommand_Nlist64 {
type Root = MachO;
type Parent = MachO_SymtabCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.un.borrow_mut() = _io.read_u4le()?.into();
*self_rc.type.borrow_mut() = _io.read_u1()?.into();
*self_rc.sect.borrow_mut() = _io.read_u1()?.into();
*self_rc.desc.borrow_mut() = _io.read_u2le()?.into();
*self_rc.value.borrow_mut() = _io.read_u8le()?.into();
Ok(())
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn name(
&self
) -> KResult<Ref<'_, String>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_name.get() {
return Ok(self.name.borrow());
}
self.f_name.set(true);
if ((*self.un() as u32) != (0 as u32)) {
let _pos = _io.pos();
_io.seek(((*_prc.as_ref().unwrap().str_off() as u32) + (*self.un() as u32)) as usize)?;
*self.name.borrow_mut() = bytes_to_str(&_io.read_bytes_term(0, false, true, true)?.into(), "UTF-8")?;
_io.seek(_pos)?;
}
Ok(self.name.borrow())
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn un(&self) -> Ref<'_, u32> {
self.un.borrow()
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn type(&self) -> Ref<'_, u8> {
self.type.borrow()
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn sect(&self) -> Ref<'_, u8> {
self.sect.borrow()
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn desc(&self) -> Ref<'_, u16> {
self.desc.borrow()
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn value(&self) -> Ref<'_, u64> {
self.value.borrow()
}
}
impl MachO_SymtabCommand_Nlist64 {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_SymtabCommand_StrTable {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_SymtabCommand>,
pub _self: SharedType<Self>,
unknown: RefCell<u32>,
items: RefCell<Vec<String>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_SymtabCommand_StrTable {
type Root = MachO;
type Parent = MachO_SymtabCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.unknown.borrow_mut() = _io.read_u4le()?.into();
*self_rc.items.borrow_mut() = Vec::new();
{
let mut _i = 0;
while {
self_rc.items.borrow_mut().push(bytes_to_str(&_io.read_bytes_term(0, false, true, false)?.into(), "UTF-8")?);
let _t_items = self_rc.items.borrow();
let _tmpa = _t_items.last().unwrap();
_i += 1;
let x = !(_tmpa == "".to_string());
x
} {}
}
Ok(())
}
}
impl MachO_SymtabCommand_StrTable {
}
impl MachO_SymtabCommand_StrTable {
pub fn unknown(&self) -> Ref<'_, u32> {
self.unknown.borrow()
}
}
impl MachO_SymtabCommand_StrTable {
pub fn items(&self) -> Ref<'_, Vec<String>> {
self.items.borrow()
}
}
impl MachO_SymtabCommand_StrTable {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_TwolevelHintsCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
offset: RefCell<u32>,
num_hints: RefCell<u32>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_TwolevelHintsCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.offset.borrow_mut() = _io.read_u4le()?.into();
*self_rc.num_hints.borrow_mut() = _io.read_u4le()?.into();
Ok(())
}
}
impl MachO_TwolevelHintsCommand {
}
impl MachO_TwolevelHintsCommand {
pub fn offset(&self) -> Ref<'_, u32> {
self.offset.borrow()
}
}
impl MachO_TwolevelHintsCommand {
pub fn num_hints(&self) -> Ref<'_, u32> {
self.num_hints.borrow()
}
}
impl MachO_TwolevelHintsCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_Uleb128 {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
b1: RefCell<u8>,
b2: RefCell<u8>,
b3: RefCell<u8>,
b4: RefCell<u8>,
b5: RefCell<u8>,
b6: RefCell<u8>,
b7: RefCell<u8>,
b8: RefCell<u8>,
b9: RefCell<u8>,
b10: RefCell<u8>,
_io: RefCell<BytesReader>,
f_value: Cell<bool>,
value: RefCell<i32>,
}
impl KStruct for MachO_Uleb128 {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.b1.borrow_mut() = _io.read_u1()?.into();
if ((((*self_rc.b1() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b2.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b2() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b3.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b3() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b4.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b4() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b5.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b5() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b6.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b6() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b7.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b7() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b8.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b8() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b9.borrow_mut() = _io.read_u1()?.into();
}
if ((((*self_rc.b9() as u8) & (128 as u8)) as i32) != (0 as i32)) {
*self_rc.b10.borrow_mut() = _io.read_u1()?.into();
}
Ok(())
}
}
impl MachO_Uleb128 {
pub fn value(
&self
) -> KResult<Ref<'_, i32>> {
let _io = self._io.borrow();
let _rrc = self._root.get_value().borrow().upgrade();
let _prc = self._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
if self.f_value.get() {
return Ok(self.value.borrow());
}
self.f_value.set(true);
*self.value.borrow_mut() = (((((((*self.b1() as u8) % (128 as u8)) as i32) << (0 as i32)) as i32) + (if ((((*self.b1() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b2() as u8) % (128 as u8)) as i32) << (7 as i32)) as i32) + (if ((((*self.b2() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b3() as u8) % (128 as u8)) as i32) << (14 as i32)) as i32) + (if ((((*self.b3() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b4() as u8) % (128 as u8)) as i32) << (21 as i32)) as i32) + (if ((((*self.b4() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b5() as u8) % (128 as u8)) as i32) << (28 as i32)) as i32) + (if ((((*self.b5() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b6() as u8) % (128 as u8)) as i32) << (35 as i32)) as i32) + (if ((((*self.b6() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b7() as u8) % (128 as u8)) as i32) << (42 as i32)) as i32) + (if ((((*self.b7() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b8() as u8) % (128 as u8)) as i32) << (49 as i32)) as i32) + (if ((((*self.b8() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((((*self.b9() as u8) % (128 as u8)) as i32) << (56 as i32)) as i32) + (if ((((*self.b8() as u8) & (128 as u8)) as i32) == (0 as i32)) { 0 } else { ((((*self.b10() as u8) % (128 as u8)) as i32) << (63 as i32)) } as i32)) } as i32)) } as i32)) } as i32)) } as i32)) } as i32)) } as i32)) } as i32)) } as i32))) as i32;
Ok(self.value.borrow())
}
}
impl MachO_Uleb128 {
pub fn b1(&self) -> Ref<'_, u8> {
self.b1.borrow()
}
}
impl MachO_Uleb128 {
pub fn b2(&self) -> Ref<'_, u8> {
self.b2.borrow()
}
}
impl MachO_Uleb128 {
pub fn b3(&self) -> Ref<'_, u8> {
self.b3.borrow()
}
}
impl MachO_Uleb128 {
pub fn b4(&self) -> Ref<'_, u8> {
self.b4.borrow()
}
}
impl MachO_Uleb128 {
pub fn b5(&self) -> Ref<'_, u8> {
self.b5.borrow()
}
}
impl MachO_Uleb128 {
pub fn b6(&self) -> Ref<'_, u8> {
self.b6.borrow()
}
}
impl MachO_Uleb128 {
pub fn b7(&self) -> Ref<'_, u8> {
self.b7.borrow()
}
}
impl MachO_Uleb128 {
pub fn b8(&self) -> Ref<'_, u8> {
self.b8.borrow()
}
}
impl MachO_Uleb128 {
pub fn b9(&self) -> Ref<'_, u8> {
self.b9.borrow()
}
}
impl MachO_Uleb128 {
pub fn b10(&self) -> Ref<'_, u8> {
self.b10.borrow()
}
}
impl MachO_Uleb128 {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_UuidCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
uuid: RefCell<Vec<u8>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_UuidCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.uuid.borrow_mut() = _io.read_bytes(16 as usize)?.into();
Ok(())
}
}
impl MachO_UuidCommand {
}
impl MachO_UuidCommand {
pub fn uuid(&self) -> Ref<'_, Vec<u8>> {
self.uuid.borrow()
}
}
impl MachO_UuidCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_Version {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_VersionMinCommand>,
pub _self: SharedType<Self>,
p1: RefCell<u8>,
minor: RefCell<u8>,
major: RefCell<u8>,
release: RefCell<u8>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_Version {
type Root = MachO;
type Parent = MachO_VersionMinCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.p1.borrow_mut() = _io.read_u1()?.into();
*self_rc.minor.borrow_mut() = _io.read_u1()?.into();
*self_rc.major.borrow_mut() = _io.read_u1()?.into();
*self_rc.release.borrow_mut() = _io.read_u1()?.into();
Ok(())
}
}
impl MachO_Version {
}
impl MachO_Version {
pub fn p1(&self) -> Ref<'_, u8> {
self.p1.borrow()
}
}
impl MachO_Version {
pub fn minor(&self) -> Ref<'_, u8> {
self.minor.borrow()
}
}
impl MachO_Version {
pub fn major(&self) -> Ref<'_, u8> {
self.major.borrow()
}
}
impl MachO_Version {
pub fn release(&self) -> Ref<'_, u8> {
self.release.borrow()
}
}
impl MachO_Version {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_VersionMinCommand {
pub _root: SharedType<MachO>,
pub _parent: SharedType<MachO_LoadCommand>,
pub _self: SharedType<Self>,
version: RefCell<OptRc<MachO_Version>>,
sdk: RefCell<OptRc<MachO_Version>>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_VersionMinCommand {
type Root = MachO;
type Parent = MachO_LoadCommand;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
let t = Self::read_into::<_, MachO_Version>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.version.borrow_mut() = t;
let t = Self::read_into::<_, MachO_Version>(&*_io, Some(self_rc._root.clone()), Some(self_rc._self.clone()))?.into();
*self_rc.sdk.borrow_mut() = t;
Ok(())
}
}
impl MachO_VersionMinCommand {
}
impl MachO_VersionMinCommand {
pub fn version(&self) -> Ref<'_, OptRc<MachO_Version>> {
self.version.borrow()
}
}
impl MachO_VersionMinCommand {
pub fn sdk(&self) -> Ref<'_, OptRc<MachO_Version>> {
self.sdk.borrow()
}
}
impl MachO_VersionMinCommand {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}
#[derive(Default, Debug, Clone)]
pub struct MachO_VmProt {
pub _root: SharedType<MachO>,
pub _parent: SharedType<KStructUnit>,
pub _self: SharedType<Self>,
strip_read: RefCell<bool>,
is_mask: RefCell<bool>,
reserved0: RefCell<bool>,
copy: RefCell<bool>,
no_change: RefCell<bool>,
execute: RefCell<bool>,
write: RefCell<bool>,
read: RefCell<bool>,
reserved1: RefCell<u64>,
_io: RefCell<BytesReader>,
}
impl KStruct for MachO_VmProt {
type Root = MachO;
type Parent = KStructUnit;
fn read<S: KStream>(
self_rc: &OptRc<Self>,
_io: &S,
_root: SharedType<Self::Root>,
_parent: SharedType<Self::Parent>,
) -> KResult<()> {
*self_rc._io.borrow_mut() = _io.clone();
self_rc._root.set(_root.get());
self_rc._parent.set(_parent.get());
self_rc._self.set(Ok(self_rc.clone()));
let _rrc = self_rc._root.get_value().borrow().upgrade();
let _prc = self_rc._parent.get_value().borrow().upgrade();
let _r = _rrc.as_ref().unwrap();
*self_rc.strip_read.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.is_mask.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.reserved0.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.copy.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.no_change.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.execute.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.write.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.read.borrow_mut() = _io.read_bits_int_be(1)? != 0;
*self_rc.reserved1.borrow_mut() = _io.read_bits_int_be(24)?;
Ok(())
}
}
impl MachO_VmProt {
}
/**
* Special marker to support execute-only protection.
*/
impl MachO_VmProt {
pub fn strip_read(&self) -> Ref<'_, bool> {
self.strip_read.borrow()
}
}
/**
* Indicates to use value as a mask against the actual protection bits.
*/
impl MachO_VmProt {
pub fn is_mask(&self) -> Ref<'_, bool> {
self.is_mask.borrow()
}
}
/**
* Reserved (unused) bit.
*/
impl MachO_VmProt {
pub fn reserved0(&self) -> Ref<'_, bool> {
self.reserved0.borrow()
}
}
/**
* Used when write permission can not be obtained, to mark the entry as COW.
*/
impl MachO_VmProt {
pub fn copy(&self) -> Ref<'_, bool> {
self.copy.borrow()
}
}
/**
* Used only by memory_object_lock_request to indicate no change to page locks.
*/
impl MachO_VmProt {
pub fn no_change(&self) -> Ref<'_, bool> {
self.no_change.borrow()
}
}
/**
* Execute permission.
*/
impl MachO_VmProt {
pub fn execute(&self) -> Ref<'_, bool> {
self.execute.borrow()
}
}
/**
* Write permission.
*/
impl MachO_VmProt {
pub fn write(&self) -> Ref<'_, bool> {
self.write.borrow()
}
}
/**
* Read permission.
*/
impl MachO_VmProt {
pub fn read(&self) -> Ref<'_, bool> {
self.read.borrow()
}
}
/**
* Reserved (unused) bits.
*/
impl MachO_VmProt {
pub fn reserved1(&self) -> Ref<'_, u64> {
self.reserved1.borrow()
}
}
impl MachO_VmProt {
pub fn _io(&self) -> Ref<'_, BytesReader> {
self._io.borrow()
}
}