Thread overview
Assembly Soru
Jul 26, 2012
huseyin
Jul 26, 2012
huseyin
Jul 26, 2012
huseyin
Jul 26, 2012
huseyin
July 26, 2012

Merhaba arkadaşlar assembly ile çok ilgili değil aslında sormak istediğim şey bir programın ld tarafından nereden linklendiği tam anlatamadım ama kodda anlayacaksınız

EXTERN	system
EXTERN	puts
EXTERN	getchar
EXTERN 	exit
EXTERN	sleep

section .text

global	_start
_start:
	PUSHA
	PUSH	EBP
	MOV	EBP, ESP
	PUSH	String_1
	CALL	puts
	POP	EAX
	PUSH	String_2
	CALL	puts
	POP	EAX
	CALL	getchar
	MOV	ESP, EBP
	POP	EBP
	POPA
	PUSH	0
	CALL	exit



section .data

ClearScreen 		db "clear",0
String_1 		db "hello world",0
String_2 		db "Press ENTER to exit...",0

Nasm de başarıyla derleniyor ancak linkleme işleminde

a.o: In function _start': a.asm:(.text+0x0): multiple definition of _start'
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o:(.text+0x0): first defined here
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function _start': (.text+0x18): undefined reference to main'


hatası var anlayamadığım start ı benim tanımlamam gerekiyor diye biliyorum ama ayrıca main i de tanımlasamda hala referans hatası alıyorum windows altında goLinker da aynı hatayı almıyorum sebebi nedir ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 26, 2012

Hayır kernel ile ilgili değil bu basit bir deneme başarırsam ayrıntılı olarak açıklıcam :D

Bağlayıcıyı kendim system komutu ile çağırıyorum komutlarını da kendim giriyorum anladığım kadarıyla crt1.o ile linklenmemesi gerekli ama ne ile linklenmeli dediğim gibi windows üzerinde golink te bir problem çıkmadı linux için alternatif linker tavsiyeniz var mı yoksa ld yi kullanmayı mı öğrenmeliyim ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 26, 2012

benim istediğim sadece libc ve linux e olan bağlanma
windows da da aynı şekilde windows msvcrt ye bağlıyorum ama golink kullanıyorum baktım golink in linux sürümü mevcut değil ld kullanım ddim ama sanırım beceremedim
Kullandığım komut bu
ld -s -dynamic-linker /lib/ld-linux.a -o dosyaadi dosya.o /lib/libc.a

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 26, 2012

İlgilendiğiniz için çok teşekkür ederim sorunu çözdüm

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 26, 2012

Benim deneyimim yok.

Bağlayıcıyı kendin açıkça mı çağırıyorsun? Komut satırı nasıl? _start'ı crt1.o herhalde otomatik olarak ekliyor ve senin _start'la karışıyor.

main de çalıştırılabilir programlar için gerekir. Eğer kernel ile ilgiliyse sanırım program değil, program parçası (.o dosyası) oluşturman gerekiyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 26, 2012

Kullandığın bağlayıcı satırını gösterirsen bilen arkadaşlar yardımcı olurlar.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]