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 手册中一样。
我正在尝试 运行 打印 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 手册中一样。