ELF64 文件是什么样的?

What does a ELF64 File look like?

好的。

所以我一直在弄乱汇编,我想知道:链接 ELF64 文件是什么样子的,我可以直接用纯文本编写链接文件吗? (比如创建一个文件,例如 G "main",写入系统调用的十六进制值,然后 运行 它没有链接或汇编。)

我试过了objdump -x main但我不认为,这是整个ELF文件,因为我认为信息太少了。

此处输出:

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  

我的汇编代码:

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;

编辑:我的编译器现在完成了,我只是坚持使用汇编程序并让 NASM/ld 完成工作

如果您想查看可执行文件的完整结构,请尝试:

objdump -D some_exe

如果您想查看十六进制格式的文件,请执行以下操作:

xxd some_exe

hexdump some_exe

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

好吧...如果您确切知道可执行文件的指令并将它们以二进制形式写入纯文本文件,理论上您可以做到。

例如,对于任何给定的可执行文件 exe_file,您可以这样做:

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

plaintext_file 将是一个与您的 exe_file 完全相同的可执行文件。如果在第 2 步和第 3 步之间修改了 temp_file,那么您将直接手动修改可执行文件,尽管它不太可能更改某些内容 "specific",除非您对 elf64 格式有非常深刻的理解(我不知道,我不确定用这个可以实现什么)。

注意:我知道第 1 步是多余的,我用它来演示您从 2 个简单的纯文本文件开始。