edlang/object/read/index.html
2024-02-13 06:38:44 +00:00

32 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Interface for reading object files."><title>object::read - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="object" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../object/index.html">object</a><span class="version">0.32.2</span></h2></div><h2 class="location"><a href="#">Module read</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#traits">Traits</a></li><li><a href="#types">Type Aliases</a></li></ul></section><h2><a href="../index.html">In crate object</a></h2></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../../object/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Module <a href="../index.html">object</a>::<wbr><a class="mod" href="#">read</a><button id="copy-path" title="Copy item path to clipboard"><img src="../../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../../src/object/read/mod.rs.html#1-860">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Interface for reading object files.</p>
<h3 id="unified-read-api"><a href="#unified-read-api">Unified read API</a></h3>
<p>The <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a> trait provides a unified read API for accessing common features of
object files, such as sections and symbols. There is an implementation of this
trait for <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>, which allows reading any file format, as well as implementations
for each file format:
<a href="elf/struct.ElfFile.html" title="struct object::read::elf::ElfFile"><code>ElfFile</code></a>, <a href="macho/struct.MachOFile.html" title="struct object::read::macho::MachOFile"><code>MachOFile</code></a>, <a href="coff/struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>,
<a href="pe/struct.PeFile.html" title="struct object::read::pe::PeFile"><code>PeFile</code></a>, <a href="wasm::WasmFile"><code>WasmFile</code></a>, <a href="xcoff::XcoffFile"><code>XcoffFile</code></a>.</p>
<h3 id="low-level-read-api"><a href="#low-level-read-api">Low level read API</a></h3>
<p>The submodules for each file format define helpers that operate on the raw structs.
These can be used instead of the unified API, or in conjunction with it to access
details that are not available via the unified API.</p>
<p>See the <a href="#modules">submodules</a> for examples of the low level read API.</p>
<h3 id="naming-convention"><a href="#naming-convention">Naming Convention</a></h3>
<p>Types that form part of the unified API for a file format are prefixed with the
name of the file format.</p>
<h3 id="example-for-unified-read-api"><a href="#example-for-unified-read-api">Example for unified read API</a></h3>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>object::{Object, ObjectSection};
<span class="kw">use </span>std::error::Error;
<span class="kw">use </span>std::fs;
<span class="doccomment">/// Reads a file and displays the name of each section.
</span><span class="kw">fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;(), Box&lt;<span class="kw">dyn </span>Error&gt;&gt; {
<span class="kw">let </span>data = fs::read(<span class="string">"path/to/binary"</span>)<span class="question-mark">?</span>;
<span class="kw">let </span>file = object::File::parse(<span class="kw-2">&amp;*</span>data)<span class="question-mark">?</span>;
<span class="kw">for </span>section <span class="kw">in </span>file.sections() {
<span class="macro">println!</span>(<span class="string">"{}"</span>, section.name()<span class="question-mark">?</span>);
}
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="archive/index.html" title="mod object::read::archive">archive</a></div><div class="desc docblock-short">Support for archive files.</div></li><li><div class="item-name"><a class="mod" href="coff/index.html" title="mod object::read::coff">coff</a></div><div class="desc docblock-short">Support for reading Windows COFF files.</div></li><li><div class="item-name"><a class="mod" href="elf/index.html" title="mod object::read::elf">elf</a></div><div class="desc docblock-short">Support for reading ELF files.</div></li><li><div class="item-name"><a class="mod" href="macho/index.html" title="mod object::read::macho">macho</a></div><div class="desc docblock-short">Support for reading Mach-O files.</div></li><li><div class="item-name"><a class="mod" href="pe/index.html" title="mod object::read::pe">pe</a></div><div class="desc docblock-short">Support for reading PE files.</div></li></ul><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Bytes.html" title="struct object::read::Bytes">Bytes</a></div><div class="desc docblock-short">A newtype for byte slices.</div></li><li><div class="item-name"><a class="struct" href="struct.CodeView.html" title="struct object::read::CodeView">CodeView</a></div><div class="desc docblock-short">PDB information from the debug directory in a PE file.</div></li><li><div class="item-name"><a class="struct" href="struct.Comdat.html" title="struct object::read::Comdat">Comdat</a></div><div class="desc docblock-short">A COMDAT section group in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.ComdatIterator.html" title="struct object::read::ComdatIterator">ComdatIterator</a></div><div class="desc docblock-short">An iterator for the COMDAT section groups in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.ComdatSectionIterator.html" title="struct object::read::ComdatSectionIterator">ComdatSectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a <a href="struct.Comdat.html" title="struct object::read::Comdat"><code>Comdat</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CompressedData.html" title="struct object::read::CompressedData">CompressedData</a></div><div class="desc docblock-short">Data that may be compressed.</div></li><li><div class="item-name"><a class="struct" href="struct.CompressedFileRange.html" title="struct object::read::CompressedFileRange">CompressedFileRange</a></div><div class="desc docblock-short">A range in a file that may be compressed.</div></li><li><div class="item-name"><a class="struct" href="struct.DynamicRelocationIterator.html" title="struct object::read::DynamicRelocationIterator">DynamicRelocationIterator</a></div><div class="desc docblock-short">An iterator for the dynamic relocation entries in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Error.html" title="struct object::read::Error">Error</a></div><div class="desc docblock-short">The error type used within the read module.</div></li><li><div class="item-name"><a class="struct" href="struct.Export.html" title="struct object::read::Export">Export</a></div><div class="desc docblock-short">An exported symbol.</div></li><li><div class="item-name"><a class="struct" href="struct.Import.html" title="struct object::read::Import">Import</a></div><div class="desc docblock-short">An imported symbol.</div></li><li><div class="item-name"><a class="struct" href="struct.NoDynamicRelocationIterator.html" title="struct object::read::NoDynamicRelocationIterator">NoDynamicRelocationIterator</a></div><div class="desc docblock-short">An iterator for files that dont have dynamic relocations.</div></li><li><div class="item-name"><a class="struct" href="struct.ObjectMap.html" title="struct object::read::ObjectMap">ObjectMap</a></div><div class="desc docblock-short">A map from addresses to symbol names and object files.</div></li><li><div class="item-name"><a class="struct" href="struct.ObjectMapEntry.html" title="struct object::read::ObjectMapEntry">ObjectMapEntry</a></div><div class="desc docblock-short">An <a href="struct.ObjectMap.html" title="struct object::read::ObjectMap"><code>ObjectMap</code></a> entry.</div></li><li><div class="item-name"><a class="struct" href="struct.Relocation.html" title="struct object::read::Relocation">Relocation</a></div><div class="desc docblock-short">A relocation entry.</div></li><li><div class="item-name"><a class="struct" href="struct.Section.html" title="struct object::read::Section">Section</a></div><div class="desc docblock-short">A section in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SectionIndex.html" title="struct object::read::SectionIndex">SectionIndex</a></div><div class="desc docblock-short">The index used to identify a section in a file.</div></li><li><div class="item-name"><a class="struct" href="struct.SectionIterator.html" title="struct object::read::SectionIterator">SectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SectionRelocationIterator.html" title="struct object::read::SectionRelocationIterator">SectionRelocationIterator</a></div><div class="desc docblock-short">An iterator for the relocation entries in a <a href="struct.Section.html" title="struct object::read::Section"><code>Section</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Segment.html" title="struct object::read::Segment">Segment</a></div><div class="desc docblock-short">A loadable segment in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SegmentIterator.html" title="struct object::read::SegmentIterator">SegmentIterator</a></div><div class="desc docblock-short">An iterator for the loadable segments in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.StringTable.html" title="struct object::read::StringTable">StringTable</a></div><div class="desc docblock-short">A table of zero-terminated strings.</div></li><li><div class="item-name"><a class="struct" href="struct.Symbol.html" title="struct object::read::Symbol">Symbol</a></div><div class="desc docblock-short">An symbol in a <a href="struct.SymbolTable.html" title="struct object::read::SymbolTable"><code>SymbolTable</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolIndex.html" title="struct object::read::SymbolIndex">SymbolIndex</a></div><div class="desc docblock-short">The index used to identify a symbol in a symbol table.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolIterator.html" title="struct object::read::SymbolIterator">SymbolIterator</a></div><div class="desc docblock-short">An iterator for the symbols in a <a href="struct.SymbolTable.html" title="struct object::read::SymbolTable"><code>SymbolTable</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolMap.html" title="struct object::read::SymbolMap">SymbolMap</a></div><div class="desc docblock-short">A map from addresses to symbol information.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolMapName.html" title="struct object::read::SymbolMapName">SymbolMapName</a></div><div class="desc docblock-short">The type used for entries in a <a href="struct.SymbolMap.html" title="struct object::read::SymbolMap"><code>SymbolMap</code></a> that maps from addresses to names.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolTable.html" title="struct object::read::SymbolTable">SymbolTable</a></div><div class="desc docblock-short">A symbol table in a <a href="enum.File.html" title="enum object::read::File"><code>File</code></a>.</div></li></ul><h2 id="enums" class="section-header"><a href="#enums">Enums</a></h2><ul class="item-table"><li><div class="item-name"><a class="enum" href="enum.CompressionFormat.html" title="enum object::read::CompressionFormat">CompressionFormat</a></div><div class="desc docblock-short">A data compression format.</div></li><li><div class="item-name"><a class="enum" href="enum.File.html" title="enum object::read::File">File</a></div><div class="desc docblock-short">An object file that can be any supported file format.</div></li><li><div class="item-name"><a class="enum" href="enum.FileKind.html" title="enum object::read::FileKind">FileKind</a></div><div class="desc docblock-short">A file format kind.</div></li><li><div class="item-name"><a class="enum" href="enum.ObjectKind.html" title="enum object::read::ObjectKind">ObjectKind</a></div><div class="desc docblock-short">An object kind.</div></li><li><div class="item-name"><a class="enum" href="enum.RelocationTarget.html" title="enum object::read::RelocationTarget">RelocationTarget</a></div><div class="desc docblock-short">The target referenced by a <a href="struct.Relocation.html" title="struct object::read::Relocation"><code>Relocation</code></a>.</div></li><li><div class="item-name"><a class="enum" href="enum.SymbolSection.html" title="enum object::read::SymbolSection">SymbolSection</a></div><div class="desc docblock-short">The section where an <a href="trait.ObjectSymbol.html" title="trait object::read::ObjectSymbol"><code>ObjectSymbol</code></a> is defined.</div></li></ul><h2 id="traits" class="section-header"><a href="#traits">Traits</a></h2><ul class="item-table"><li><div class="item-name"><a class="trait" href="trait.Object.html" title="trait object::read::Object">Object</a></div><div class="desc docblock-short">An object file.</div></li><li><div class="item-name"><a class="trait" href="trait.ObjectComdat.html" title="trait object::read::ObjectComdat">ObjectComdat</a></div><div class="desc docblock-short">A COMDAT section group in an <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ObjectSection.html" title="trait object::read::ObjectSection">ObjectSection</a></div><div class="desc docblock-short">A section in an <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ObjectSegment.html" title="trait object::read::ObjectSegment">ObjectSegment</a></div><div class="desc docblock-short">A loadable segment in an <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ObjectSymbol.html" title="trait object::read::ObjectSymbol">ObjectSymbol</a></div><div class="desc docblock-short">A symbol table entry in an <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ObjectSymbolTable.html" title="trait object::read::ObjectSymbolTable">ObjectSymbolTable</a></div><div class="desc docblock-short">A symbol table in an <a href="trait.Object.html" title="trait object::read::Object"><code>Object</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ReadRef.html" title="trait object::read::ReadRef">ReadRef</a></div><div class="desc docblock-short">A trait for reading references to <a href="../pod/trait.Pod.html" title="trait object::pod::Pod"><code>Pod</code></a> types from a block of data.</div></li><li><div class="item-name"><a class="trait" href="trait.SymbolMapEntry.html" title="trait object::read::SymbolMapEntry">SymbolMapEntry</a></div><div class="desc docblock-short">An entry in a <a href="struct.SymbolMap.html" title="struct object::read::SymbolMap"><code>SymbolMap</code></a>.</div></li></ul><h2 id="types" class="section-header"><a href="#types">Type Aliases</a></h2><ul class="item-table"><li><div class="item-name"><a class="type" href="type.NativeFile.html" title="type object::read::NativeFile">NativeFile</a></div><div class="desc docblock-short">The native executable file for the target platform.</div></li><li><div class="item-name"><a class="type" href="type.Result.html" title="type object::read::Result">Result</a></div><div class="desc docblock-short">The result type used within the read module.</div></li></ul></section></div></main></body></html>