edlang/object/read/index.html

32 lines
20 KiB
HTML
Raw Normal View History

<!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 do