wasmer/rustdoc/goblin/elf/index.html
2019-09-06 15:57:44 -07:00

36 lines
11 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="API documentation for the Rust `elf` mod in crate `goblin`."><meta name="keywords" content="rust, rustlang, rust-lang, elf"><title>goblin::elf - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="shortcut icon" href="../../favicon.ico"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../goblin/index.html'><div class='logo-container'><img src='../../rust-logo.png' alt='logo'></div></a><p class='location'>Module elf</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#types">Type Definitions</a></li></ul></div><p class='location'><a href='../index.html'>goblin</a></p><script>window.sidebarCurrent = {name: 'elf', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form js-only"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../src/goblin/elf/mod.rs.html#1-452' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../index.html'>goblin</a>::<wbr><a class="mod" href=''>elf</a></span></h1><div class='docblock'><p>The generic ELF module, which gives access to ELF constants and other helper functions, which are independent of ELF bithood. Also defines an <code>Elf</code> struct which implements a unified parser that returns a wrapped <code>Elf64</code> or <code>Elf32</code> binary.</p>
<p>To access the exact 32-bit or 64-bit versions, use <a href="header/header32/struct.Header.html">goblin::elf32::Header</a>/<a href="header/header64/struct.Header.html">goblin::elf64::Header</a>, etc., for the various 32/64-bit structs.</p>
<h1 id="example" class="section-header"><a href="#example">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">fs</span>::<span class="ident">File</span>;
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">read</span> (<span class="ident">bytes</span>: <span class="kw-2">&amp;</span>[<span class="ident">u8</span>]) {
<span class="kw">match</span> <span class="ident">goblin</span>::<span class="ident">elf</span>::<span class="ident">Elf</span>::<span class="ident">parse</span>(<span class="kw-2">&amp;</span><span class="ident">bytes</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">binary</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">entry</span> <span class="op">=</span> <span class="ident">binary</span>.<span class="ident">entry</span>;
<span class="kw">for</span> <span class="ident">ph</span> <span class="kw">in</span> <span class="ident">binary</span>.<span class="ident">program_headers</span> {
<span class="kw">if</span> <span class="ident">ph</span>.<span class="ident">p_type</span> <span class="op">=</span><span class="op">=</span> <span class="ident">goblin</span>::<span class="ident">elf</span>::<span class="ident">program_header</span>::<span class="ident">PT_LOAD</span> {
<span class="comment">// TODO: you should validate p_filesz before allocating.</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">_buf</span> <span class="op">=</span> <span class="macro">vec</span><span class="macro">!</span>[<span class="number">0u8</span>; <span class="ident">ph</span>.<span class="ident">p_filesz</span> <span class="kw">as</span> <span class="ident">usize</span>];
<span class="comment">// read responsibly</span>
}
}
},
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">&gt;</span> ()
}
}</pre></div>
<p>This will properly access the underlying 32-bit or 64-bit binary automatically. Note that since
32-bit binaries typically have shorter 32-bit values in some cases (specifically for addresses and pointer
values), these values are upcasted to u64/i64s when appropriate.</p>
<p>See <a href="struct.Elf.html">goblin::elf::Elf</a> for more information.</p>
<p>You are still free to use the specific 32-bit or 64-bit versions by accessing them through <code>goblin::elf64</code>, etc., but you will have to parse and/or construct the various components yourself.
In other words, there is no unified 32/64-bit <code>Elf</code> struct.</p>
<h1 id="note" class="section-header"><a href="#note">Note</a></h1>
<p>To use the automagic ELF datatype union parser, you <em>must</em> enable/opt-in to the <code>elf64</code>, <code>elf32</code>, and
<code>endian_fd</code> features if you disable <code>default</code>.</p>
</div><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2>
<table><tr class='module-item'><td><a class="mod" href="compression_header/index.html" title='goblin::elf::compression_header mod'>compression_header</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="dynamic/index.html" title='goblin::elf::dynamic mod'>dynamic</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="header/index.html" title='goblin::elf::header mod'>header</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="note/index.html" title='goblin::elf::note mod'>note</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="program_header/index.html" title='goblin::elf::program_header mod'>program_header</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="reloc/index.html" title='goblin::elf::reloc mod'>reloc</a></td><td class='docblock-short'><p>Relocation computations</p>
</td></tr><tr class='module-item'><td><a class="mod" href="section_header/index.html" title='goblin::elf::section_header mod'>section_header</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="sym/index.html" title='goblin::elf::sym mod'>sym</a></td><td class='docblock-short'></td></tr></table><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.Elf.html" title='goblin::elf::Elf struct'>Elf</a></td><td class='docblock-short'><p>An ELF binary. The underlying data structures are read according to the headers byte order and container size (32 or 64).</p>
</td></tr></table><h2 id='types' class='section-header'><a href="#types">Type Definitions</a></h2>
<table><tr class='module-item'><td><a class="type" href="type.Dyn.html" title='goblin::elf::Dyn type'>Dyn</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.Dynamic.html" title='goblin::elf::Dynamic type'>Dynamic</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.Header.html" title='goblin::elf::Header type'>Header</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.ProgramHeader.html" title='goblin::elf::ProgramHeader type'>ProgramHeader</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.ProgramHeaders.html" title='goblin::elf::ProgramHeaders type'>ProgramHeaders</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.Reloc.html" title='goblin::elf::Reloc type'>Reloc</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.RelocSection.html" title='goblin::elf::RelocSection type'>RelocSection</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.SectionHeader.html" title='goblin::elf::SectionHeader type'>SectionHeader</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.SectionHeaders.html" title='goblin::elf::SectionHeaders type'>SectionHeaders</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.ShdrIdx.html" title='goblin::elf::ShdrIdx type'>ShdrIdx</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.Sym.html" title='goblin::elf::Sym type'>Sym</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="type" href="type.Symtab.html" title='goblin::elf::Symtab type'>Symtab</a></td><td class='docblock-short'></td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><aside id="help" class="hidden"><div><h1 class="hidden">Help</h1><div class="shortcuts"><h2>Keyboard Shortcuts</h2><dl><dt><kbd>?</kbd></dt><dd>Show this help dialog</dd><dt><kbd>S</kbd></dt><dd>Focus the search field</dd><dt><kbd></kbd></dt><dd>Move up in search results</dd><dt><kbd></kbd></dt><dd>Move down in search results</dd><dt><kbd></kbd></dt><dd>Switch tab</dd><dt><kbd>&#9166;</kbd></dt><dd>Go to active search result</dd><dt><kbd>+</kbd></dt><dd>Expand all sections</dd><dt><kbd>-</kbd></dt><dd>Collapse all sections</dd></dl></div><div class="infos"><h2>Search Tricks</h2><p>Prefix searches with a type followed by a colon (e.g., <code>fn:</code>) to restrict the search to a given type.</p><p>Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>.</p><p>Search functions by type signature (e.g., <code>vec -> usize</code> or <code>* -> vec</code>)</p><p>Search multiple things at once by splitting your query with comma (e.g., <code>str,u8</code> or <code>String,struct:Vec,test</code>)</p></div></div></aside><script>window.rootPath = "../../";window.currentCrate = "goblin";</script><script src="../../aliases.js"></script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>