Search code examples
linuxassemblycompiler-construction64-bitelf

What does a ELF64 File look like?


Ok.

So i have been messing around with Assembly, and i was wondering: just HOW does a linkes ELF64 File look like, and can i directly write a linked file in plain-text? (like create a file e.G "main", write the hex-values of the system-calls, and then run it without linking or assembling.)

I have tried objdump -x main but i don't think, this is the entire ELF-File, because there is too less information, as i think.

Here the output:

main:     Dateiformat elf64-x86-64

Inhalt von Abschnitt .text:
 4000b0 b8040000 00bb0100 0000b9d0 006000ba  .............`..
 4000c0 0c000000 cd80b801 000000cd 80        .............   
Inhalt von Abschnitt .data:
 6000d0 48454c4c 4f2c2057 4f524c44           HELLO, WORLD  

my Assembler Code:

section .data
        msg: db "HELLO, WORLD"
        len: equ $-msg

section .text


        ;write
        mov eax, 4
        mov ebx, 1
        mov ecx, msg
        mov edx, len
        int 80h;

        ;quit
        mov eax, 1
        int 80h;

EDIT: My Compiler is finished now, I just stuck with assembler and let NASM/ld do the job


Solution

  • If you want to see the entire structure of your executable try:

    objdump -D some_exe
    

    and if you want to see your file in hex format do:

    xxd some_exe
    

    or

    hexdump some_exe
    

    can i directly write a linked file in plain-text?

    Well... Theoretically you can if you know exactly the instructions of the executable and you write them in binary to a plaintext file.

    For example, for any given executable exe_file you can do this:

    touch temp_file plaintext_file
    xxd -p exe_file > temp_file
    xxd -p -r temp_file > plaintext_file
    chmod u+x plaintext_file
    

    The plaintext_file will be an executable exactly the same as your exe_file. If between steps 2 and 3 you modify the temp_file you are directly modifying the executable by hand, although it is not very likely to change something "specific", unless you have very deep understanding of elf64 format (which I don't and I'm not sure what can be achieved with this).

    Note: I know step 1 is redundant, I used it for demonstrating that you are starting with 2 simple plaintext files.