Problemas com ld -i

1. Problemas com ld -i

Antonio Raphael
arabasso

(usa Slackware)

Enviado em 05/03/2008 - 14:06h

Olá a todos, estou com um problema que está me fazendo arrancar os cabelos. Estou estudando sobre arquitetura de sistemas operacionais usando C e Assembly GAS.

No linux, é fácil de copilar e linkar, o problema é no windows (usando cygwin com mingw). No windows, é preciso usar o parâmetro -i pra ele não colocar funções do windows no programa, pois quero um binário puro.

Aí que começam os problemas... Se eu uso ld -i pra linkar, ele simplesmente linka tudo de qualquer jeito! Vejam:

arquivo "loader.S"

.text
.globl start
.extern _main
.code16

start:
call _main

-------------------------------------------

Arquivo "main.c"

main()
{
for(;;);
}

-------------------------------------------

Compilando:

# gcc -c loader.S -o loader.o
# gcc -c -nostdinc -ffreestanding -o main.o main.c
# ld -i -e start -Ttext 0x50 -o tmp.o loader.o main.o
# objcopy -R .note -R .comment -S -O binary tmp.o loader.bin

Ele gera o binário puro, mas nada funciona. Ele não chama a função _main de jeito nenhum, nem coloca o código no segmento 0x0050 (sou obrigado a setar os registradores de segmento com esse valor). O duro é que se não usar -i no ld, o programa fica enorme e ele diz que há referência à funções da win32.

O que pode estar acontecendo?


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts