Article View: pl.comp.lang.asm
Article #2096Re: kompilacja, ELF, Linux, specyfikacja
From: Michoo
Date: Thu, 28 Jan 2010 22:14
Date: Thu, 28 Jan 2010 22:14
68 lines
3725 bytes
3725 bytes
RobertGawron pisze: > Witam, > dzięki za odpowiedź. > > Zamiast generować z pliku z kodem asemblera (o składni, jaką mam) plik > o składni NASM'a, czy innej i kompilowania go normalnie, wolałbym > napisać swój kompilator, który pobiera ten plik (z moją składnią) > asemblera i tworzy plik wykonywalny (albo pliki, które później się > linkuje, już normalnie). > > Czytam teraz swój wcześniejszy post i widzę, że jest trochę > zagmatwany, więc napiszę raz jeszcze. > > > Przykładowy skompilowany kod: > > rgawron@foo:/opt/asm/nasm$ objdump -d foo > > foo: file format elf32-i386 > > Disassembly of section .text: > > 08048060 <.text>: > 8048060: 31 c0 xor %eax,%eax > 8048062: 31 db xor %ebx,%ebx > 8048064: bb 37 00 00 00 mov $0x37,%ebx > 8048069: b8 05 00 00 00 mov $0x5,%eax > 804806e: 01 d8 add %ebx,%eax > 8048070: 89 c3 mov %eax,%ebx > 8048072: b8 01 00 00 00 mov $0x1,%eax > 8048077: cd 80 int $0x80 > > Chodziło mi o drugą i trzecią kolumnę (licząc od 1 ;-)), skąd ludzie, > którzy tworzą kompilatory wiedzą, że instrukcję int 0x80 trzeba > przetłumaczyć na 0xcd 0x80. Nazywa się to "opcode" i jest w dokumentacji procesora. Np. http://developer.intel.com/design/pentiumii/manuals/243191.htm > > W międzyczasie znalazłem odpowiedź na to pytanie (aczkolwiek nie wiem, > czy pełną) - http://www.logix.cz/michal/doc/i386/chp17-03.htm To jest bardzo stary zestaw - szybko patrząc brakuje choćby cmpxchg, ale powinien do Twoich zastosowań starczyć. > > Asembler, który mam jest b. prosty, więc liczę, że pójdzie to w miarę > szybko, jakby ktoś chciał o nim poczytać, to tu jest link ( > http://rgawron.megiteam.pl/2009/04/23/vm/ ) (mam nadzieję, że nie > będzie mi to poczytane za spam). Na obrazku brakuje jeszcze bytecode->jit->"machine code" biorąc pod uwagę jak działa większość współczesnych środowisk. > > Trudno mi było znaleźć info w sieci, bo co bym nie wpisał w > wyszukiwarce to dostawałem linki do kursów uczących asemblera albo > opisujących jak skompilować program. > Imo pisanie kompilatora obsługującego pliki elf dla tak małego języka to lekki overkill (nawet g++ generuje kod assemblerowy, który potem jest kompilowany) Ale jak chcesz się bawić to poszukaj info o budowie pliku elf - ona nie jest aż tak trudna. Wtedy twój assembler będzie generował plik *.o, który można będzie zlinkować za pomocą ldd z bibliotekami startowymi i dostać wykonywalnego elfa. -- Pozdrawiam Michoo
Technical Details
Message-ID:
<hjt272$vvr$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!lublin.pl!news.onet.pl!not-for-mailReferences:
<63f1ee0c-fb30-4145-a90c-cbaa5e2593e4@36g2000yqu.googlegroups.com> <hjqiib$vp2$1@news.onet.pl> <d146137e-0741-43a3-a3c2-3eeefc9ad572@r19g2000yqb.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!lublin.pl!news.onet.pl!not-for-mail From: Michoo <michoo_news@vp.pl> Newsgroups: pl.comp.lang.asm Subject: Re: kompilacja, ELF, Linux, specyfikacja Date: Thu, 28 Jan 2010 23:14:24 +0100 Organization: http://onet.pl Lines: 68 Message-ID: <hjt272$vvr$1@news.onet.pl> References: <63f1ee0c-fb30-4145-a90c-cbaa5e2593e4@36g2000yqu.googlegroups.com> <hjqiib$vp2$1@news.onet.pl> <d146137e-0741-43a3-a3c2-3eeefc9ad572@r19g2000yqb.googlegroups.com> NNTP-Posting-Host: c2-211.icpnet.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1264716834 32763 62.21.2.211 (28 Jan 2010 22:13:54 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Thu, 28 Jan 2010 22:13:54 +0000 (UTC) User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706) In-Reply-To: <d146137e-0741-43a3-a3c2-3eeefc9ad572@r19g2000yqb.googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit