ELF64文件是什么样的?

时间:2016-10-17 07:51:02

标签: linux assembly compiler-construction 64-bit elf

确定。

所以我一直在乱搞大会,我想知道:只是如何链接ELF64文件看起来像,我可以直接用纯文本写一个链接文件吗? (比如创建一个文件e.G" main&#34 ;,写入系统调用的十六进制值,然后在不连接或汇编的情况下运行它。)

我试过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完成这项工作

1 个答案:

答案 0 :(得分:1)

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

objdump -D some_exe

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

xxd some_exe

hexdump some_exe
  

我可以用纯文本直接写一个链接文件吗?

嗯......从理论上讲,如果你确切地知道可执行文件的指令,你就可以用二进制文件将它们写成纯文本文件。

例如,对于任何给定的可执行文件 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 ,则直接手动修改可执行文件,尽管它不太可能更改某些内容"具体",除非您有非常深刻的理解elf64格式(我不知道,我不知道用这个可以实现什么)。

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