gpt4 book ai didi

linux - bin执行错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:45 24 4
gpt4 key购买 nike

我是汇编语言的新手,我写完了一个简单的程序,所以我运行了以下命令

nasm -o learn.bin learn.asm

然后组装代码

 chmod +x learn.bin

然后最后运行它

 ./learn.bin

但是最后一个返回错误

 bash: ./learn.bin: cannot execute binary file

我正在使用 atom intel CPU 运行 ubuntu

任何帮助都会很棒,提前致谢

最佳答案

错误消息听起来好像您没有正确的 ELF 可执行 header 。可以使用 Nasm 的 -f bin 输出格式(默认设置,如果您未指定输出格式)来组装文件。但是它需要一个 ELF 头塞进去。

通常的方法是 nasm -f elf32 learn.asm(或者 -f elf64 如果你有 64 位代码)。如果一切顺利,这个“应该”产生“learn.o”。然后,您必须使用 ld -o learn learn.o 链接此“可链接对象”文件(如果您使用的是 64 位 ,请添加 -melf-i386 code>ld... 你可能就是)。或者,根据代码,gcc -o learn learn.o(为 64 位 gcc 添加 -m32)。我看到 Jester 刚刚告诉你了(用更少的话)。

这是一个“应该”按照您尝试的方式工作的文件示例:

[map all hkhw.map] ; optional
;==========================
bits 32
ORIGIN equ 8048000h
org ORIGIN
section .text
code_offset equ 0
code_addr:
;--------------------------- ELF header----------------------
dd $464c457f,$00010101,0,0,$00030002,1,main,$34,0,0,$00200034,2,0
dd 1,code_offset,code_addr,code_addr,code_filez,code_memsz,5,4096
dd 1,data_offset,data_addr,data_addr,data_filez,data_memsz,6,4096
main:
;--------- your code goes here -------------------------------

push byte 4
pop eax
xor ebx, ebx
mov ecx, msg
push byte msg_len
pop edx
int 80h

push byte 1
pop eax
int 80h


;------------ constant data -----------------------
; (note that we're in .text, not .rdata)
align 4



;-------------------------------------------------------------
align 4
code_memsz equ $ - $$
code_filez equ code_memsz
data_addr equ (ORIGIN+code_memsz+4095)/4096*4096 + (code_filez % 4096)
data_offset equ code_filez
section .data vstart=data_addr
;------------ initialized data -------------

msg db "Hello from Nasm, all by itself!", 10
msg_len equ $ - msg

;---------------------------------------------------------------------------
idat_memsz equ $ - $$
bss_addr equ data_addr + ($ - $$)
section .bss vstart=bss_addr
;------------- uninitialized data ----------------------



;-------------------------------------------------
udat_memsz equ $ - $$
data_memsz equ idat_memsz + udat_memsz
data_filez equ idat_memsz
;========================

嗯……格式不太好。大概读不懂。尝试 Nasm 论坛。如果您发布代码,我们可以为您提供更多帮助

关于linux - bin执行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com