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

39 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="Support for reading Windows COFF files."><title>object::read::coff - 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 coff</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#traits">Traits</a></li><li><a href="#functions">Functions</a></li><li><a href="#types">Type Aliases</a></li></ul></section><h2><a href="../index.html">In object::read</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 href="../index.html">read</a>::<wbr><a class="mod" href="#">coff</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/coff/mod.rs.html#1-66">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>Support for reading Windows COFF files.</p>
<p>Traits are used to abstract over the difference between COFF object files
and COFF bigobj files. The primary trait for this is <a href="trait.CoffHeader.html" title="trait object::read::coff::CoffHeader"><code>CoffHeader</code></a>.</p>
<h3 id="high-level-api"><a href="#high-level-api">High level API</a></h3>
<p><a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a> implements the <a href="../trait.Object.html" title="trait object::read::Object"><code>Object</code></a> trait for
COFF files. <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a> is parameterised by <a href="trait.CoffHeader.html" title="trait object::read::coff::CoffHeader"><code>CoffHeader</code></a>.
The default parameter allows reading regular COFF object files,
while the type alias <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a> allows reading COFF bigobj files.</p>
<p><a href="struct.ImportFile.html" title="struct object::read::coff::ImportFile"><code>ImportFile</code></a> allows reading COFF short imports that are used in import
libraries. Currently these are not integrated with the unified read API.</p>
<h3 id="low-level-api"><a href="#low-level-api">Low level API</a></h3>
<p>The <a href="trait.CoffHeader.html" title="trait object::read::coff::CoffHeader"><code>CoffHeader</code></a> trait can be directly used to parse both COFF
object files (which start with <a href="../../pe/struct.ImageFileHeader.html" title="struct object::pe::ImageFileHeader"><code>pe::ImageFileHeader</code></a>) and COFF bigobj
files (which start with <a href="../../pe/struct.AnonObjectHeaderBigobj.html" title="struct object::pe::AnonObjectHeaderBigobj"><code>pe::AnonObjectHeaderBigobj</code></a>).</p>
<h4 id="example-for-low-level-api"><a href="#example-for-low-level-api">Example for low level API</a></h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>object::pe;
<span class="kw">use </span>object::read::coff::{CoffHeader, ImageSymbol <span class="kw">as _</span>};
<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 and symbol.
</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><span class="kw-2">mut </span>offset = <span class="number">0</span>;
<span class="kw">let </span>header = pe::ImageFileHeader::parse(<span class="kw-2">&amp;*</span>data, <span class="kw-2">&amp;mut </span>offset)<span class="question-mark">?</span>;
<span class="kw">let </span>sections = header.sections(<span class="kw-2">&amp;*</span>data, offset)<span class="question-mark">?</span>;
<span class="kw">let </span>symbols = header.symbols(<span class="kw-2">&amp;*</span>data)<span class="question-mark">?</span>;
<span class="kw">for </span>section <span class="kw">in </span>sections.iter() {
<span class="macro">println!</span>(<span class="string">"{}"</span>, String::from_utf8_lossy(section.name(symbols.strings())<span class="question-mark">?</span>));
}
<span class="kw">for </span>(_index, symbol) <span class="kw">in </span>symbols.iter() {
<span class="macro">println!</span>(<span class="string">"{}"</span>, String::from_utf8_lossy(symbol.name(symbols.strings())<span class="question-mark">?</span>));
}
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><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.CoffComdat.html" title="struct object::read::coff::CoffComdat">CoffComdat</a></div><div class="desc docblock-short">A COMDAT section group in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffComdatIterator.html" title="struct object::read::coff::CoffComdatIterator">CoffComdatIterator</a></div><div class="desc docblock-short">An iterator for the COMDAT section groups in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffComdatSectionIterator.html" title="struct object::read::coff::CoffComdatSectionIterator">CoffComdatSectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a COMDAT section group in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffFile.html" title="struct object::read::coff::CoffFile">CoffFile</a></div><div class="desc docblock-short">A COFF object file.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffRelocationIterator.html" title="struct object::read::coff::CoffRelocationIterator">CoffRelocationIterator</a></div><div class="desc docblock-short">An iterator for the relocations in a <a href="struct.CoffSection.html" title="struct object::read::coff::CoffSection"><code>CoffSection</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSection.html" title="struct object::read::coff::CoffSection">CoffSection</a></div><div class="desc docblock-short">A section in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSectionIterator.html" title="struct object::read::coff::CoffSectionIterator">CoffSectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSegment.html" title="struct object::read::coff::CoffSegment">CoffSegment</a></div><div class="desc docblock-short">A loadable section in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSegmentIterator.html" title="struct object::read::coff::CoffSegmentIterator">CoffSegmentIterator</a></div><div class="desc docblock-short">An iterator for the loadable sections in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSymbol.html" title="struct object::read::coff::CoffSymbol">CoffSymbol</a></div><div class="desc docblock-short">A symbol in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a> or <a href="../pe/struct.PeFile.html" title="struct object::read::pe::PeFile"><code>PeFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSymbolIterator.html" title="struct object::read::coff::CoffSymbolIterator">CoffSymbolIterator</a></div><div class="desc docblock-short">An iterator for the symbols in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>
or <a href="../pe/struct.PeFile.html" title="struct object::read::pe::PeFile"><code>PeFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.CoffSymbolTable.html" title="struct object::read::coff::CoffSymbolTable">CoffSymbolTable</a></div><div class="desc docblock-short">A symbol table in a <a href="struct.CoffFile.html" title="struct object::read::coff::CoffFile"><code>CoffFile</code></a>
or <a href="../pe/struct.PeFile.html" title="struct object::read::pe::PeFile"><code>PeFile</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.ImportFile.html" title="struct object::read::coff::ImportFile">ImportFile</a></div><div class="desc docblock-short">A Windows short form description of a symbol to import.</div></li><li><div class="item-name"><a class="struct" href="struct.ImportObjectData.html" title="struct object::read::coff::ImportObjectData">ImportObjectData</a></div><div class="desc docblock-short">The data following <a href="../../pe/struct.ImportObjectHeader.html" title="struct object::pe::ImportObjectHeader"><code>pe::ImportObjectHeader</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.SectionTable.html" title="struct object::read::coff::SectionTable">SectionTable</a></div><div class="desc docblock-short">The table of section headers in a COFF or PE file.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolIterator.html" title="struct object::read::coff::SymbolIterator">SymbolIterator</a></div><div class="desc docblock-short">An iterator for symbol entries in a COFF or PE file.</div></li><li><div class="item-name"><a class="struct" href="struct.SymbolTable.html" title="struct object::read::coff::SymbolTable">SymbolTable</a></div><div class="desc docblock-short">A table of symbol entries in a COFF or PE file.</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.ImportName.html" title="enum object::read::coff::ImportName">ImportName</a></div><div class="desc docblock-short">The name or ordinal to import from a DLL.</div></li><li><div class="item-name"><a class="enum" href="enum.ImportType.html" title="enum object::read::coff::ImportType">ImportType</a></div><div class="desc docblock-short">The kind of import symbol.</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.CoffHeader.html" title="trait object::read::coff::CoffHeader">CoffHeader</a></div><div class="desc docblock-short">A trait for generic access to <a href="../../pe/struct.ImageFileHeader.html" title="struct object::pe::ImageFileHeader"><code>pe::ImageFileHeader</code></a> and <a href="../../pe/struct.AnonObjectHeaderBigobj.html" title="struct object::pe::AnonObjectHeaderBigobj"><code>pe::AnonObjectHeaderBigobj</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.ImageSymbol.html" title="trait object::read::coff::ImageSymbol">ImageSymbol</a></div><div class="desc docblock-short">A trait for generic access to <a href="../../pe/struct.ImageSymbol.html" title="struct object::pe::ImageSymbol"><code>pe::ImageSymbol</code></a> and <a href="../../pe/struct.ImageSymbolEx.html" title="struct object::pe::ImageSymbolEx"><code>pe::ImageSymbolEx</code></a>.</div></li></ul><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2><ul class="item-table"><li><div class="item-name"><a class="fn" href="fn.anon_object_class_id.html" title="fn object::read::coff::anon_object_class_id">anon_object_class_id</a></div><div class="desc docblock-short">Read the <code>class_id</code> field from a <a href="../../pe/struct.AnonObjectHeader.html" title="struct object::pe::AnonObjectHeader"><code>pe::AnonObjectHeader</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.CoffBigComdat.html" title="type object::read::coff::CoffBigComdat">CoffBigComdat</a></div><div class="desc docblock-short">A COMDAT section group in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigComdatIterator.html" title="type object::read::coff::CoffBigComdatIterator">CoffBigComdatIterator</a></div><div class="desc docblock-short">An iterator for the COMDAT section groups in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigComdatSectionIterator.html" title="type object::read::coff::CoffBigComdatSectionIterator">CoffBigComdatSectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a COMDAT section group in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile">CoffBigFile</a></div><div class="desc docblock-short">A COFF bigobj object file with 32-bit section numbers.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigRelocationIterator.html" title="type object::read::coff::CoffBigRelocationIterator">CoffBigRelocationIterator</a></div><div class="desc docblock-short">An iterator for the relocations in a <a href="type.CoffBigSection.html" title="type object::read::coff::CoffBigSection"><code>CoffBigSection</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSection.html" title="type object::read::coff::CoffBigSection">CoffBigSection</a></div><div class="desc docblock-short">A section in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSectionIterator.html" title="type object::read::coff::CoffBigSectionIterator">CoffBigSectionIterator</a></div><div class="desc docblock-short">An iterator for the sections in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSegment.html" title="type object::read::coff::CoffBigSegment">CoffBigSegment</a></div><div class="desc docblock-short">A loadable section in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSegmentIterator.html" title="type object::read::coff::CoffBigSegmentIterator">CoffBigSegmentIterator</a></div><div class="desc docblock-short">An iterator for the loadable sections in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSymbol.html" title="type object::read::coff::CoffBigSymbol">CoffBigSymbol</a></div><div class="desc docblock-short">A symbol in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSymbolIterator.html" title="type object::read::coff::CoffBigSymbolIterator">CoffBigSymbolIterator</a></div><div class="desc docblock-short">An iterator for the symbols in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li><li><div class="item-name"><a class="type" href="type.CoffBigSymbolTable.html" title="type object::read::coff::CoffBigSymbolTable">CoffBigSymbolTable</a></div><div class="desc docblock-short">A symbol table in a <a href="type.CoffBigFile.html" title="type object::read::coff::CoffBigFile"><code>CoffBigFile</code></a>.</div></li></ul></section></div></main></body></html>