# Object files (ivss) An **object file** contains assembled bytes together with information needed to combine them with other objects. It can describe an unresolved reference even though the final address is not yet known: ```asm .extern target .section my_data slot: .word target .end ``` Here `slot` reserves a four-byte word in `my_data`. Its contents depend on `target`, which another object must define. The assembler records four zero placeholder bytes and an `R_SS_32` relocation naming that symbol. Save the example as `reference.s` and produce a linker-readable object with: ```bash $ ./asembler -hex -o reference.o reference.s ``` The file includes section contents, a [[ivss-symbol-table|symbol table]], a [[ivss-string-table|string table]], and [[ivss-relocation-entries|relocation records]]. These let the linker connect the reference to its definition. The emulator applies the resulting relocation when loading the linked program, so the placeholder is not the final runtime value. ivss uses an [[ivss-elf-representation|ELF-based representation]] serialized as [[ivss-hex-serialization|textual hex]]. The `.o` suffix describes its role, not a guarantee that it is a conventional binary object accepted by other toolchains. The assembler's default human-readable dump is a separate inspection format. Source: [asembler.c](https://github.com/yanevskiv/ivss/blob/main/src/asembler.c), [elf.c](https://github.com/yanevskiv/ivss/blob/main/src/elf.c).