Assembled program gives error: /a.out: cannot execute binary file: Exec format error
Assembled program gives error: /a.out: cannot execute binary file: Exec format error
我是 64 位 x86 编码的新手,但我是 运行宁 Ubuntu 14.04(值得信赖),我有一段非常简单的 64 位代码 assemble 使用 作为 。我得到的输出具有奇怪的权限和文件类型。
当我运行:
as file.s
我得到一个文件 a.out
,权限为 770。
我在执行时遇到这个错误:
bash: ./a.out: cannot execute binary file: Exec format error
当我运行:
file ./a.out
我得到:
./a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
我使用的汇编代码是:
.section .data
.LC0:
.string "/bin/sh"
.LC1:
.string "/bin/sh"
.LC3:
.quad .LC1, 0
.text
.globl _start
_start:
.LFB0:
pushq %rbp
movq %rsp, %rbp
movq ,%rax # System Call to execve
movq $.LC0, %rdi # Pass program to execute
movq $.LC3, %rsi # Pass command line arguments
syscall
movl [=12=], %eax
popq %rbp
ret
您想 assemble 使用 GNU 汇编器 (AS) 程序,然后使用链接器生成最终的可执行文件。为此,您应该能够使用类似的东西:
as file.s -o file.o
ld file.o -o file
第一个命令告诉 assembler 使用 -o
选项输出一个名为 file.o
的 ELF64 对象。第二个命令使用 -o
选项将 file.o
链接到名为 file
的 64 位 ELF 可执行文件。
64 位系统上的典型默认行为是 assembler 和链接器生成 64 位对象和可执行文件。
然后您可以 运行 它:
./file
我是 64 位 x86 编码的新手,但我是 运行宁 Ubuntu 14.04(值得信赖),我有一段非常简单的 64 位代码 assemble 使用 作为 。我得到的输出具有奇怪的权限和文件类型。
当我运行:
as file.s
我得到一个文件 a.out
,权限为 770。
我在执行时遇到这个错误:
bash: ./a.out: cannot execute binary file: Exec format error
当我运行:
file ./a.out
我得到:
./a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
我使用的汇编代码是:
.section .data
.LC0:
.string "/bin/sh"
.LC1:
.string "/bin/sh"
.LC3:
.quad .LC1, 0
.text
.globl _start
_start:
.LFB0:
pushq %rbp
movq %rsp, %rbp
movq ,%rax # System Call to execve
movq $.LC0, %rdi # Pass program to execute
movq $.LC3, %rsi # Pass command line arguments
syscall
movl [=12=], %eax
popq %rbp
ret
您想 assemble 使用 GNU 汇编器 (AS) 程序,然后使用链接器生成最终的可执行文件。为此,您应该能够使用类似的东西:
as file.s -o file.o
ld file.o -o file
第一个命令告诉 assembler 使用 -o
选项输出一个名为 file.o
的 ELF64 对象。第二个命令使用 -o
选项将 file.o
链接到名为 file
的 64 位 ELF 可执行文件。
64 位系统上的典型默认行为是 assembler 和链接器生成 64 位对象和可执行文件。
然后您可以 运行 它:
./file