【问题标题】:Assembly code malfunction汇编代码故障
【发布时间】:2016-02-21 23:07:26
【问题描述】:

我正在学习如何进行组装,但遇到了一个奇怪的问题。我收到一条消息,说明,

collect2: 错误:ld 返回 1 个退出状态

在我收到此消息之前,虽然我收到了一串这样的错误。

_start': Name.asm:(.text+0x0): multiple definition of_start' /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位0的符号索引11无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位1的符​​号索引12无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位2的符号索引2无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位 3 有无效的符号索引 2

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位4的符号索引11无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位5的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位6的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位7的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位8的符号索引12无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位9的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位10的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位11的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位12的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位13的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位14的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位15的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位16的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位17的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位18的符号索引13无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): 重定位19的符号索引21无效

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): 重定位0的符号索引2无效

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o:/build/buildd/eglibc-2.19/csu/.. /sysdeps/x86_64/start.S:118:首先在这里定义 /usr/bin/ld: i386 输入文件架构Name.o' is incompatible with i386:x86-64 output /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function_start': (.text+0x20): 未定义的对“main”的引用 collect2:错误:ld 返回 1 个退出状态

`_start'的多重定义

我完全不知所措。我将在下面发布我的代码,我希望这只是一个小错误。

section .data                           ;Data segment
    userMsg db 'Please enter your name : ' ;Ask the user to enter a number
    lenUserMsg equ $-userMsg             ;The length of the message
    dispMsg db 'Hi my name is'
    lenDispMsg equ $-dispMsg            

 section .bss           ;Uninitialized data
    num resb 5

section .text          ;Code Segment
global _start

_start:                ;User prompt
    mov eax, 4
    mov ebx, 1
    mov ecx, userMsg
    mov edx, lenUserMsg
    int 80h


    ;Output the message 'Your name is '
    mov eax, 4
    mov ebx, 1
    mov ecx, dispMsg
    mov edx, lenDispMsg
    int 80h  

    ;Output the name entered
    mov eax, 4
    mov ebx, 1
    mov ecx, num
    mov edx, 5
    int 80h  

    ; Exit code
    mov eax, 1
    mov ebx, 0
    int 80h

【问题讨论】:

  • 您意识到除了 x86 之外还有其他架构,对吧?此外,Ubuntu 与此无关。请相应地标记您的问题。
  • 你忘了展示你是如何组装和链接的。无论如何,问题是您与 libc 链接并尝试从 32 位对象创建 64 位程序。使用ld -melf_i386gcc -m32 -nostdlib

标签: ubuntu assembly


【解决方案1】:

我现在不在 linux 上,但是可以用 nasm 组装文件没有问题

nasm -felf32 hello.asm -ohello.obj

试试:gcc -m32 hello.obj

【讨论】:

  • 我现在设法让它工作,结果我弄错了 4 而不是 3。但是我似乎遇到了一个新问题。由于奇怪的消息,我无法让代码工作。我正在使用代码 gcc -g -Wall -fno-stack-protector -z execstack Shellcode.c Shellcode,然后我收到一条消息,说明它不能执行 i_386 代码和有关退出 1 的信息。现在我已经告诉我这是因为我需要更宽容,但我不知道如何更宽容。
猜你喜欢
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
相关资源
最近更新 更多