[+] asembler 32 bitowy na systemie 64-bitowym

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Dave
Posty: 7
Rejestracja: 09 maja 2010, 20:54

[+] asembler 32 bitowy na systemie 64-bitowym

Post 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?
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Post 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.
Awatar użytkownika
Dave
Posty: 7
Rejestracja: 09 maja 2010, 20:54

Post 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 :)
dobo
Posty: 4
Rejestracja: 26 kwietnia 2010, 00:26

Post 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
ODPOWIEDZ