Module prelude
Expand description
Convenient re-exports of the most commonly used types and traits.
This module provides a curated selection of the most frequently used types from across the dotscope library, allowing for convenient glob imports.
§Architecture
The prelude follows Rust’s standard library pattern, re-exporting the most commonly used types and traits from various modules for convenient access.
§Key Components
crate::CilObject- Main entry point for .NET assembly analysiscrate::Errorandcrate::Result- Error handling types- Core metadata types and validation configuration
§Usage Examples
use dotscope::prelude::*;
// Now you have access to the most common types
let assembly = CilObject::from_file("tests/samples/WindowsBase.dll".as_ref())?;
let methods = assembly.methods();§Thread Safety
All re-exported types maintain their original thread safety guarantees. dotscope prelude for convenient .NET assembly analysis.
The dotscope prelude provides convenient access to the most commonly used types, traits, and functions for .NET assembly analysis. This module serves as a one-stop import for typical dotscope usage patterns, reducing the need for multiple individual imports and providing immediate access to essential functionality.
§Architecture
The prelude is organized into logical groups covering all major aspects of .NET metadata analysis, from high-level assembly loading to low-level metadata table access. This organization follows the typical workflow of .NET assembly analysis applications.
§Core Components
- Entry Points:
crate::CilObject,crate::File,crate::Parser- Main interfaces for assembly loading - Type System:
crate::metadata::typesystem::CilType,crate::metadata::typesystem::TypeRegistry- Complete type representation - Metadata Access: Table types, stream access, and token-based navigation
- Analysis Tools: Disassembler, method body parsing, signature analysis
- Error Handling:
crate::Error,crate::Result- Comprehensive error management
§Key Components
§Organized Import Groups
- Core Types: Error handling, results, and main entry points
- Type System: Complete type representation and resolution
- Metadata Tables: High-level and raw table access
- Signatures: Type and method signature parsing
- Method Analysis: IL disassembly and method body analysis
- Import/Export: Assembly dependency analysis
- Streams and Headers: Low-level metadata structure access
- Constants: Element types, attributes, and metadata identifiers
§Usage Examples
§Basic Assembly Analysis
use dotscope::prelude::*;
// Core functionality immediately available
let assembly = CilObject::from_file("example.dll".as_ref())?;
let types = assembly.types();
// Type system components
for entry in types.iter() {
let cil_type = entry.value();
match cil_type.flavor() {
CilFlavor::Class => println!("Class: {}.{}", cil_type.namespace, cil_type.name),
CilFlavor::Interface => println!("Interface: {}.{}", cil_type.namespace, cil_type.name),
_ => {}
}
}§Method Analysis and Disassembly
use dotscope::prelude::*;
let assembly = CilObject::from_file("example.dll".as_ref())?;
let methods = assembly.methods();
for entry in methods.iter() {
let method = entry.value();
if let Some(body) = method.body.get() {
if body.size_code > 0 {
println!("Method {} has {} bytes of IL", method.name, body.size_code);
println!(" Max stack: {}", body.max_stack);
// Access disassembled instructions through blocks
for (block_id, block) in method.blocks() {
println!(" Block {}: {} instructions", block_id, block.instructions.len());
}
}
}
}§Metadata Table Access
use dotscope::prelude::*;
let assembly = CilObject::from_file("example.dll".as_ref())?;
// High-level table access
if let Some(assembly_info) = assembly.assembly() {
println!("Assembly: {}", assembly_info.name);
println!("Version: {}.{}.{}.{}",
assembly_info.major_version, assembly_info.minor_version,
assembly_info.build_number, assembly_info.revision_number);
}
// Token-based navigation
let typedef_token = Token::new(0x02000001);
if let Some(tables) = assembly.tables() {
if let Some(typedef_table) = tables.table::<TypeDefRaw>(TableId::TypeDef) {
let row_index = typedef_token.row();
if let Some(typedef) = typedef_table.get(row_index) {
println!("Type name index: {}", typedef.type_name);
}
}
}§Integration
The prelude integrates components from across the dotscope ecosystem:
crate::metadata- Core metadata parsing and representationcrate::disassembler- CIL instruction analysis and control flowcrate::File- Low-level PE file parsing and memory managementcrate::Error- Comprehensive error handling and reporting
§Import Organization
The prelude is organized into logical sections for easy navigation:
- Core Types: Essential error handling and configuration
- Entry Points: Main interfaces for assembly loading and parsing
- Type System: Complete .NET type representation and resolution
- Metadata Tables: Both high-level and raw table access
- Signatures: Type and method signature parsing
- Method Analysis: IL analysis and method body parsing
- Disassembler: CIL instruction decoding and control flow
- Import/Export: Assembly dependency analysis
- Streams and Headers: Metadata storage structure access
- Constants: Type system and marshalling constants
§Thread Safety
Most types in the prelude are either Send + Sync or use interior mutability
for thread-safe access. Reference-counted types (crate::metadata::typesystem::CilTypeRc, crate::metadata::method::MethodRc, etc.)
enable safe sharing across threads without performance penalties.
§Standards Compliance
- ECMA-335: Full compliance with .NET metadata specification
- Type Safety: Strong typing throughout the API surface
- Memory Safety: No unsafe code in public interfaces
- Performance: Zero-cost abstractions and efficient data structures
Re-exports§
pub use crate::Error;pub use crate::Result;pub use crate::ValidationConfig;pub use crate::CilObject;pub use crate::File;pub use crate::Parser;pub use crate::metadata::token::Token;pub use crate::metadata::root::CIL_HEADER_MAGIC;pub use crate::metadata::imports::ImportType;pub use crate::metadata::typesystem::CilFlavor;pub use crate::metadata::typesystem::CilModifier;pub use crate::metadata::typesystem::CilPrimitive;pub use crate::metadata::typesystem::CilPrimitiveData;pub use crate::metadata::typesystem::CilPrimitiveKind;pub use crate::metadata::typesystem::CilType;pub use crate::metadata::typesystem::CilTypeList;pub use crate::metadata::typesystem::CilTypeRc;pub use crate::metadata::typesystem::CilTypeRef;pub use crate::metadata::typesystem::CilTypeRefList;pub use crate::metadata::typesystem::CilTypeReference;pub use crate::metadata::typesystem::TypeRegistry;pub use crate::metadata::typesystem::TypeResolver;pub use crate::metadata::typesystem::TypeSource;pub use crate::metadata::tables::Assembly;pub use crate::metadata::tables::AssemblyRc;pub use crate::metadata::tables::AssemblyRef;pub use crate::metadata::tables::AssemblyRefRc;pub use crate::metadata::tables::Module;pub use crate::metadata::tables::ModuleRc;pub use crate::metadata::tables::ModuleRef;pub use crate::metadata::tables::ModuleRefRc;pub use crate::metadata::tables::ExportedType;pub use crate::metadata::tables::ExportedTypeRc;pub use crate::metadata::tables::Field;pub use crate::metadata::tables::FieldLayout;pub use crate::metadata::tables::FieldList;pub use crate::metadata::tables::FieldMap;pub use crate::metadata::tables::FieldPtr;pub use crate::metadata::tables::FieldPtrList;pub use crate::metadata::tables::FieldPtrMap;pub use crate::metadata::tables::FieldPtrRc;pub use crate::metadata::tables::FieldRc;pub use crate::metadata::tables::MethodPtr;pub use crate::metadata::tables::MethodPtrList;pub use crate::metadata::tables::MethodPtrMap;pub use crate::metadata::tables::MethodPtrRc;pub use crate::metadata::tables::Param;pub use crate::metadata::tables::ParamList;pub use crate::metadata::tables::ParamPtr;pub use crate::metadata::tables::ParamPtrList;pub use crate::metadata::tables::ParamPtrMap;pub use crate::metadata::tables::ParamPtrRc;pub use crate::metadata::tables::ParamRc;pub use crate::metadata::tables::Event;pub use crate::metadata::tables::EventList;pub use crate::metadata::tables::EventPtr;pub use crate::metadata::tables::EventPtrList;pub use crate::metadata::tables::EventPtrMap;pub use crate::metadata::tables::EventPtrRc;pub use crate::metadata::tables::EventRc;pub use crate::metadata::tables::Property;pub use crate::metadata::tables::PropertyList;pub use crate::metadata::tables::PropertyPtr;pub use crate::metadata::tables::PropertyPtrList;pub use crate::metadata::tables::PropertyPtrMap;pub use crate::metadata::tables::PropertyPtrRc;pub use crate::metadata::tables::PropertyRc;pub use crate::metadata::tables::InterfaceImpl;pub use crate::metadata::tables::InterfaceImplRc;pub use crate::metadata::tables::MemberRef;pub use crate::metadata::tables::MemberRefRc;pub use crate::metadata::tables::GenericParam;pub use crate::metadata::tables::GenericParamConstraint;pub use crate::metadata::tables::GenericParamConstraintRc;pub use crate::metadata::tables::GenericParamList;pub use crate::metadata::tables::GenericParamRc;pub use crate::metadata::tables::MethodSpec;pub use crate::metadata::tables::MethodSpecRc;pub use crate::metadata::tables::CustomAttribute;pub use crate::metadata::tables::CustomAttributeList;pub use crate::metadata::tables::CustomAttributeRc;pub use crate::metadata::tables::DeclSecurity;pub use crate::metadata::tables::DeclSecurityRc;pub use crate::metadata::tables::File as MetadataFile;pub use crate::metadata::tables::FileRc;pub use crate::metadata::tables::ManifestResource;pub use crate::metadata::tables::ManifestResourceRc;pub use crate::metadata::tables::StandAloneSig;pub use crate::metadata::tables::StandAloneSigRc;pub use crate::metadata::tables::AssemblyOsRaw;pub use crate::metadata::tables::AssemblyProcessorRaw;pub use crate::metadata::tables::AssemblyRaw;pub use crate::metadata::tables::AssemblyRefOsRaw;pub use crate::metadata::tables::AssemblyRefProcessorRaw;pub use crate::metadata::tables::AssemblyRefRaw;pub use crate::metadata::tables::ModuleRaw;pub use crate::metadata::tables::ModuleRefRaw;pub use crate::metadata::tables::ExportedTypeRaw;pub use crate::metadata::tables::TypeDefRaw;pub use crate::metadata::tables::TypeRefRaw;pub use crate::metadata::tables::TypeSpecRaw;pub use crate::metadata::tables::FieldLayoutRaw;pub use crate::metadata::tables::FieldPtrRaw;pub use crate::metadata::tables::FieldRaw;pub use crate::metadata::tables::FieldRvaRaw;pub use crate::metadata::tables::MethodDefRaw;pub use crate::metadata::tables::MethodPtrRaw;pub use crate::metadata::tables::ParamPtrRaw;pub use crate::metadata::tables::ParamRaw;pub use crate::metadata::tables::ClassLayoutRaw;pub use crate::metadata::tables::ConstantRaw;pub use crate::metadata::tables::CustomAttributeRaw;pub use crate::metadata::tables::DeclSecurityRaw;pub use crate::metadata::tables::EventMapRaw;pub use crate::metadata::tables::EventPtrRaw;pub use crate::metadata::tables::EventRaw;pub use crate::metadata::tables::FieldMarshalRaw;pub use crate::metadata::tables::GenericParamConstraintRaw;pub use crate::metadata::tables::GenericParamRaw;pub use crate::metadata::tables::ImplMapRaw;pub use crate::metadata::tables::InterfaceImplRaw;pub use crate::metadata::tables::ManifestResourceRaw;pub use crate::metadata::tables::MemberRefRaw;pub use crate::metadata::tables::MethodImplRaw;pub use crate::metadata::tables::MethodSemanticsRaw;pub use crate::metadata::tables::MethodSpecRaw;pub use crate::metadata::tables::NestedClassRaw;pub use crate::metadata::tables::PropertyMapRaw;pub use crate::metadata::tables::PropertyPtrRaw;pub use crate::metadata::tables::PropertyRaw;pub use crate::metadata::tables::StandAloneSigRaw;pub use crate::metadata::tables::FileRaw;pub use crate::metadata::signatures::SignatureArray;pub use crate::metadata::signatures::SignatureField;pub use crate::metadata::signatures::SignatureLocalVariable;pub use crate::metadata::signatures::SignatureLocalVariables;pub use crate::metadata::signatures::SignatureMethod;pub use crate::metadata::signatures::SignatureMethodSpec;pub use crate::metadata::signatures::SignatureParameter;pub use crate::metadata::signatures::SignaturePointer;pub use crate::metadata::signatures::SignatureProperty;pub use crate::metadata::signatures::SignatureSzArray;pub use crate::metadata::signatures::SignatureTypeSpec;pub use crate::metadata::signatures::TypeSignature;pub use crate::metadata::signatures::parse_field_signature;pub use crate::metadata::signatures::parse_local_var_signature;pub use crate::metadata::signatures::parse_method_signature;pub use crate::metadata::signatures::parse_method_spec_signature;pub use crate::metadata::signatures::parse_property_signature;pub use crate::metadata::signatures::parse_type_spec_signature;pub use crate::metadata::tables::MemberRefSignature;pub use crate::metadata::method::ExceptionHandler;pub use crate::metadata::method::ExceptionHandlerFlags;pub use crate::metadata::method::InstructionIterator;pub use crate::metadata::method::Method;pub use crate::metadata::method::MethodBody;pub use crate::metadata::method::MethodImplCodeType;pub use crate::metadata::method::MethodImplManagement;pub use crate::metadata::method::MethodImplOptions;pub use crate::metadata::method::MethodList;pub use crate::metadata::method::MethodMap;pub use crate::metadata::method::MethodModifiers;pub use crate::metadata::method::MethodRc;pub use crate::metadata::method::MethodRef;pub use crate::metadata::method::MethodRefList;pub use crate::disassembler::decode_blocks;pub use crate::disassembler::decode_instruction;pub use crate::disassembler::decode_stream;pub use crate::disassembler::BasicBlock;pub use crate::disassembler::FlowType;pub use crate::disassembler::Immediate;pub use crate::disassembler::Instruction;pub use crate::disassembler::InstructionCategory;pub use crate::disassembler::Operand;pub use crate::disassembler::OperandType;pub use crate::disassembler::StackBehavior;pub use crate::metadata::exports::Exports;pub use crate::metadata::imports::Import;pub use crate::metadata::imports::ImportContainer;pub use crate::metadata::imports::ImportRc;pub use crate::metadata::imports::Imports;pub use crate::metadata::streams::Blob;pub use crate::metadata::streams::Guid;pub use crate::metadata::streams::Strings;pub use crate::metadata::streams::UserStrings;pub use crate::metadata::streams::BlobIterator;pub use crate::metadata::streams::GuidIterator;pub use crate::metadata::streams::StringsIterator;pub use crate::metadata::streams::UserStringsIterator;pub use crate::metadata::streams::StreamHeader;pub use crate::metadata::streams::TablesHeader;pub use crate::metadata::cor20header::Cor20Header;pub use crate::metadata::root::Root;pub use crate::metadata::tables::EventAttributes;pub use crate::metadata::tables::FieldAttributes;pub use crate::metadata::tables::FileAttributes;pub use crate::metadata::tables::ParamAttributes;pub use crate::metadata::tables::PropertyAttributes;pub use crate::metadata::tables::TypeAttributes;pub use crate::metadata::typesystem::ELEMENT_TYPE;pub use crate::metadata::marshalling::NATIVE_TYPE;pub use crate::metadata::marshalling::VARIANT_TYPE;pub use crate::metadata::tables::TableId;pub use crate::metadata::tables::CodedIndex;pub use crate::metadata::tables::CodedIndexType;pub use crate::metadata::tables::MetadataTable;pub use crate::metadata::tables::TableInfo;pub use crate::metadata::tables::TableInfoRef;