🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2096

Re: kompilacja, ELF, Linux, specyfikacja

#2096
From: Michoo
Date: Thu, 28 Jan 2010 22:14
68 lines
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-mail
References: <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