Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expand declaration attributes #68

Merged
merged 17 commits into from
Feb 23, 2019
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ name = "prototype"
path = "src/bin/main.rs"

[dependencies]
goblin = "0.0.19"
goblin = "0.0.21"
scroll = "0.9"
log = "0.4"
env_logger = "0.5"
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ let mut obj = ArtifactBuilder::new(triple!("x86_64-unknown-unknown-unknown-elf")
// it is a runtime error to define a symbol _without_ declaring it first
obj.declarations(
[
("deadbeef", Decl::Function { global: false }),
("main", Decl::Function { global: true }),
("str.1", Decl::CString { global: false }),
("DEADBEEF", Decl::DataImport),
("printf", Decl::FunctionImport),
("deadbeef", Decl::function().into()),
("main", Decl::function().global().into()),
("str.1", Decl::cstring().into()),
("DEADBEEF", Decl::data_import()),
("printf", Decl::function_import()),
].into_iter().cloned()
)?;

Expand Down Expand Up @@ -89,7 +89,7 @@ e_phoff: <font color="#C4A000">0x0</font> e_shoff: <font color="#C4A000">0x2a2</
<span style="background-color:#D3D7CF"><font color="#2E3436">0 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436"> </font></span> SHT_NULL <font color="#C4A000">0x0 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x0 </b></font> 0x0 0x0
<span style="background-color:#2E3436"><font color="#D3D7CF">1 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.strtab </font></span> SHT_STRTAB <font color="#C4A000">0x8c </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0xc6 </b></font> 0x0 0x1
<span style="background-color:#D3D7CF"><font color="#2E3436">2 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.symtab </font></span> SHT_SYMTAB <font color="#C4A000">0x152 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0xf0 </b></font> .strtab(1) 0x18 0x8
<span style="background-color:#2E3436"><font color="#D3D7CF">3 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.data.str.1 </font></span> SHT_PROGBITS <b>ALLOC MERGE STRINGS </b> <font color="#C4A000">0x40 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x10 </b></font> 0x1 0x1
<span style="background-color:#2E3436"><font color="#D3D7CF">3 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.rodata.str.1 </font></span> SHT_PROGBITS <b>ALLOC MERGE STRINGS </b> <font color="#C4A000">0x40 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x10 </b></font> 0x1 0x1
<span style="background-color:#D3D7CF"><font color="#2E3436">4 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.text.deadbeef </font></span> SHT_PROGBITS <b>ALLOC EXECINSTR </b> <font color="#C4A000">0x50 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x14 </b></font> 0x0 0x10
<span style="background-color:#2E3436"><font color="#D3D7CF">5 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.text.main </font></span> SHT_PROGBITS <b>ALLOC EXECINSTR </b> <font color="#C4A000">0x64 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x28 </b></font> 0x0 0x10
<span style="background-color:#D3D7CF"><font color="#2E3436">6 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.reloc.main </font></span> SHT_RELA <font color="#C4A000">0x242 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x48 </b></font> .symtab(2) 0x18 0x8
Expand All @@ -100,18 +100,18 @@ e_phoff: <font color="#C4A000">0x0</font> e_shoff: <font color="#C4A000">0x2a2</
<b> Addr</b> <b>Bind </b> <b>Type </b> <b>Symbol </b> <b>Size </b> <b>Section </b> <b>Other</b>
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> NOTYPE <font color="#4E9A06">0x0 </font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> FILE <font color="#FCE94F"><b>test.o </b></font> <font color="#4E9A06">0x0 </font> <font color="#D3D7CF"><i>ABS </i></font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .data.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .rodata.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .text.deadbeef(4) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .text.main(5) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#FCE94F"><b>OBJECT </b></font> <font color="#FCE94F"><b>str.1 </b></font> <font color="#4E9A06">0x10 </font> .data.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#FCE94F"><b>OBJECT </b></font> <font color="#FCE94F"><b>str.1 </b></font> <font color="#4E9A06">0x10 </font> .rodata.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#EF2929"><b>FUNC </b></font> <font color="#FCE94F"><b>deadbeef</b></font> <font color="#4E9A06">0x14 </font> .text.deadbeef(4) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> <font color="#EF2929"><b>FUNC </b></font> <font color="#FCE94F"><b>main </b></font> <font color="#4E9A06">0x28 </font> .text.main(5) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> NOTYPE <font color="#FCE94F"><b>DEADBEEF</b></font> <font color="#4E9A06">0x0 </font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> NOTYPE <font color="#FCE94F"><b>printf </b></font> <font color="#4E9A06">0x0 </font> 0x0

<font color="#D3D7CF">Shdr Relocations(4)</font>:
<font color="#D3D7CF"><b> .text.main</b></font>(3)
<font color="#CC0000"> 13</font> X86_64_PC32 <font color="#C4A000"><b>.data.str.1</b></font>
<font color="#CC0000"> 13</font> X86_64_PC32 <font color="#C4A000"><b>.rodata.str.1</b></font>
<font color="#CC0000"> 1d</font> X86_64_PLT32 <font color="#C4A000"><b>printf</b></font>+<font color="#CC0000">-4</font>
<font color="#CC0000"> a</font> X86_64_PLT32 <font color="#C4A000"><b>.text.deadbeef</b></font>+<font color="#CC0000">-4</font>

Expand Down
8 changes: 6 additions & 2 deletions src/artifact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use std::io::Write;
use crate::{elf, mach};

pub(crate) mod decl;
pub use decl::{Decl, DefinedDecl, ImportKind};
pub use crate::artifact::decl::{DataType, Decl, DefinedDecl, ImportKind, Scope, Visibility};

/// A blob of binary bytes, representing a function body, or data object
pub type Data = Vec<u8>;
Expand Down Expand Up @@ -282,7 +282,11 @@ impl Artifact {
}
/// Declare a new symbolic reference, with the given `decl`.
/// **Note**: All declarations _must_ precede their definitions.
pub fn declare<T: AsRef<str>, D: Into<Decl>>(&mut self, name: T, decl: D) -> Result<(), Error> {
pub fn declare<T: AsRef<str>, D: Into<Decl>>(
&mut self,
name: T,
decl: D,
) -> Result<(), ArtifactError> {
let decl = decl.into();
let decl_name = self.strings.get_or_intern(name.as_ref());
let previous_was_import;
Expand Down
Loading