GNU ld 消息:"error adding symbols: file in wrong format assembly language"

GNU ld message: "error adding symbols: file in wrong format assembly language"

我正在尝试 运行 打印 hello world 的简单汇编代码

global _start

section .text
_start:
    ;printing hello world
    mov rax,1
    mov rdi,1
    mov rsi,texta
    mov rdx,11
    syscall
    ;exiting
    mov rax,60
    mov rdi,1
    syscall

section .data

    texta: db 'Hello world'

我通过nasm

组装的
root@localhost:~# nasm -f elf64 do.asm -o do.o

但是当我尝试 compile/run 它时,它显示错误

root@localhost:~# ld do.o -o do
ld: do.o: Relocations in 
generic ELF (EM: 62)
ld: do.o: error adding 
symbols: file in wrong format

有什么办法解决 我正在 运行 在 Ubuntu-in-termux

中使用它

我的系统信息:

提前致谢

请解决

But when I try to compile/run it , it show error

当我理解正确时,屏幕截图显示了目标设备(您为其生成代码的设备)。

您的汇编代码适用于 64 位 x86 CPUs,但您的 Android 设备使用 ARM CPU.

您不能 运行 ARM 设备上的 x86 CPU 汇编代码。

您必须使用 ARM 的汇编程序并编写 ARM 汇编代码 - 也许像这样,在 hello.S

.section .rodata
    texta: .ascii "Hello world"
    texta_len = . - texta         @ define assemble-time constant length

#include <asm/unistd.h>          @ only includes #define so can be included in a .S
.text
.global _start
_start:
  @ Printing hello world
    ldr r0, =1
    ldr r1, =texta            @ symbol address
    ldr r2, =texta_len        @ value of the assemble-time constant
    ldr r7, =__NR_write       @ call number from <asm/unistd.h>
    svc #0                    @ write(1, texta, len)

  @@ And exiting
    mov  r0, #0
    ldr  r7, =__NR_exit
    svc  #0                   @ exit(0)

What is the interface for ARM system calls and where is it defined in the Linux kernel?

ARM 的 GAS(GNU 汇编程序)使用 @ 作为注释字符,就像在 ARM 手册中一样。