Strona 1 z 1

[+] asembler 32 bitowy na systemie 64-bitowym

: 13 września 2010, 16:59
autor: Dave
Witam!

Jestem zadowolonym użytkownikiem Debiana w wersji AMD64, zaczynam naukę assemblera. Mam następującą sytuację: uczę się asma w wersji 32-bitowej (bądź co bądź systemy 32bitowe są na razie bardziej popularne niż 64bitowe), ale używam systemu 64-bitowego. Kompilacja nasmem nie protestuje, ale linker (ld) wyświetla:

Kod: Zaznacz cały

ld: i386 architecture of input file `hello.o' is incompatible with i386:x86-64 output
Mam następujące zapytania:
  1. Genezą problemu jest 64-bitowe jądro czy chodzi raczej o wersję linkera? Jeśli to sprawa linkera, to wystarczy chyba wpakować do systemu 32-bitową, prawda?
  2. Czy jeśli uda się to linkować, to zadziała zarówno na systemie 64bitowym jak i 32bitowym?
  3. Czy są powody, dla których powinienem się jednak uczyć wersji 64-bitowej asma?

: 14 września 2010, 03:00
autor: Rad
Ja programowałem w GNU asemblerze i znane mi rozwiązania tego problemu są następujące:
1. Kompilujesz programy za pomocą gcc i flagi -m32 (musisz doinstalować dodatkowe 32 bitowe biblioteki)
2. Na virtualboksie instalujesz sobie system 32 bitowy.
Nie wiem czy pierwsze rozwiązanie ma zastosowanie w przypadku NASMA (raczej nie :) ).

Skoro dopiero zaczynasz się uczyć zalecałbym naukę asemblera 64 bitowego - trzeba iść z trendami, poza tym w końcu wszystkie aplikacje będą 64 bitowe. Dodatkowo trochę łatwiej pisze się programy - mniej zabawy ze stosem, dodatkowe rejestry itd. Jeżeli masz wybór to polecałbym właśnie GNU assemblera zamiast NASMA - za pomocą gcc i flagi -S możesz generować np. z programów w C kod źródłowy w asemblerze (GNU) i w ten sposób można bardzo szybko się uczyć. GDB również z niego korzysta.

: 14 września 2010, 17:27
autor: Dave
Generalnie jestem znacznie bardziej przekonany do nasma, ale przyjrzę się bliżej temu GNU ;) Co do Twojego punktu drugiego - myślę, że mniej cudowania jest ze zrobieniem debootstrapu.

Dzięki za odpowiedź, już wiem co trzeba :)

: 20 września 2010, 13:28
autor: dobo
Z tego co pamiętam to Debian jest wielo-bibliotekowy. Niestety nie podpowiem Ci jaka jest nazwa pakietu, ale w Archu zainstalowałem binutils-multilib i ld wspiera również linkowanie 32-bitowych elfów tak:

Kod: Zaznacz cały

 ld -m elf_i386 elf.o

po zrobieniu:

Kod: Zaznacz cały

 nasm -f elf elf.asm elf.o