Re: Strange Linking Problem

From: linux-os
Date: Sat Mar 12 2005 - 09:38:50 EST

On Sat, 12 Mar 2005, Matthias-Christian Ott wrote:

I hope I'm right here. I've the following assembler code:

hello: db 'Hello world!',10
helloLen: equ $-hello



; Write 'Hello world!' to the screen
mov eax,4 ; 'write' system call
mov ebx,1 ; file descriptor 1 = screen
mov ecx,hello ; string to write
mov edx,helloLen ; length of string to write
int 80h ; call the kernel

; Terminate program
mov eax,1 ; 'exit' system call
mov ebx,0 ; exit with error code 0
int 80h ; call the kernel

Then I run:

nasm -f elf hello.asm

I link it with ld and run it:

ld -s -o hello hello.o
segmentation fault

I link it with the gcc and run it:

gcc hello.o -o hello
Hello world!

What's wrong with the ld?

Nothing at all. Where is _start: ?

Remove the 'main' label and substitute _start:

It is 'C' convention that programs start with main(). They
really don't. With the Linux API, they start at _start: and
do some housekeeping before calling main. That's what the
crt.o file that the 'C' tool-chain uses, does.

Dick Johnson
Penguin : Linux version 2.6.11 on an i686 machine (5537.79 BogoMips).
Notice : All mail here is now cached for review by Dictator Bush.
98.36% of all statistics are fiction.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at