Nasm代码在windows上运行但不在linux上运行

时间:2017-10-16 00:06:55

标签: linux gcc assembly nasm ld

我尝试组装并链接我的老师的NASM代码,但它在我的linux(Ubuntu 16.03)上工作时却无法正常工作(Windows)

segment .data
a dw 10
segment .bss
segment .text
global _main:
extern _printf
_main:
_b100: mov eax, 10
_b150: mov eax, a
_b200: mov ebx, eax
fin:
ret

这些是我按照说明组装代码的说明

nasm -g -f elf32 test.asm;ld -m elf_i386 -s -o demo *.o

ld返回错误

ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080

无论错误的影响如何,每次运行命令时都会生成可执行文件,但是当我想使用gdb在程序上执行断点时我无法做到。

1 个答案:

答案 0 :(得分:3)

首先,代码需要对linux进行一些修补:

main

global符号中删除下划线。同样在printf指令中,不要添加冒号,这是指定新标签时所需的。

删除下划线也适用于其他外部符号,例如global或当您使用nasm -g -felf32 -Fdwarf test.asm; gcc -m32 -o demo test.o 将功能从asm发布到C时。

编译:

nasm

您需要安装gccsudo apt-get install nasm gcc gcc-multilib和32位库,不确定最小的软件包集合,但即使在干净安装上,.text()也可能已经足够* buntu。