2013-08-25 12 views
9

Próbuję dowiedzieć się więcej o montażu z książką "Programming from the ground up". Książka obejmuje jedynie instrukcje 32-bitowe. Czy istnieje sposób na uruchomienie przykładowych kodów w 64-bitowym systemie Ubuntu? Nie mogę zrozumieć rzeczy na stronie man GNU asemblera, ale usłyszałem, że flaga -m32 powinna to zrobić. Ale nie jest to uznana opcja.Kompilacja złożony z 32 bitów w systemie 64-bitowym (Ubuntu)

Jak uzyskać łatwy dostęp do przykładów z książki?

+0

Czy możesz podać odniesienie do książki? Lub pokaż kilka próbek? –

+1

Link jest teraz podany. Ten pierwszy program to ten, który próbuję uruchomić. – huggie

+0

Myślę, że najlepszym sposobem jest zainstalowanie 32-bitowego Ubuntu w VirtualBox. Istnieją inne opcje (zobacz https://help.ubuntu.com/community/32bit_and_64bit), ale jest to naprawdę trudne. –

Odpowiedz

13

Gdy asembler i linker są wersje x86_64, opcje produkować i386 (32-bit) wyjścia są

as --32 
ld -m elf_i386 

You don” t muszą używać as i ld tylko dlatego, że pracujesz z kodem zespołu. Można użyć gcc iw takim przypadku użyjemy -m32.

gcc -m32 -nostdlib myprog.s -o myprog 
+0

Świetnie! Dzięki za wskazówkę. – huggie

2

Od strony jako człowiek:

Target i386 options: 
     [--32|--n32|--64] [-n] 
     [-march=CPU[+EXTENSION...]] [-mtune=CPU] 

Nie jestem pewien, czy to działa, po prostu spróbuj --32 lub --n32.

(-m32 wydaje ge odpowiedni gcc flagi.)

+0

'--n32' na stronie podręcznika wydaje się być literówką dla' --x32'. W przypadku starego kodu, takiego jak rzeczy w tej książce, chcesz '--32'. '--x32' jest dla nowszego kodu, który używa funkcji x86_64, ale chce wskaźników 32-bitowych. Używając 'as --32' prawdopodobnie będziesz potrzebował również' -m elf_i386' dla komend 'ld'. –

+0

@ WumpusQ.Wumbley Great it works! Sprawdziłbym twoją odpowiedź, gdybyś ją opublikował. :) Na marginesie, czy jest to zalecany sposób na naukę montażu w dzisiejszych czasach? Wiem, że ta książka jest trochę stara, ale wygląda na dobrą. Pomocny będzie każdy 64-bitowy alternatywny zasób, który jest tak dobry jak ta książka. :) – huggie

0

Tworzenie 32-bitowego pliku wykonywalnego na 64-bitowym komputerze wymaga "ostrzec" linker, że 32-bitowy plik elf nadchodzi:

$ nasm -f elf -g - F wbija eat.asm

$ ld -o jedzenia eat.o -melf_i386

To właśnie dyrektywa melf_i386 robi: mówi ld że plik eat.o jest skorelowane plik obiektowy Elf32. Wywołanie NASM jest takie samo jak na 32-bitowym komputerze.

Dzięki @Jeff Duntemann

Powiązane problemy