确定。
所以我一直在乱搞大会,我想知道:只是如何链接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完成这项工作
答案 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个简单的纯文本文件开始的。