🐧 O tym, jak napisać kompilator Asemblera pod Linuksem

🐴 haker.com.pl

🟦 codex
🖊️ 18:43 30-10-2012
Może ktoś podać namiar na jakieś objaśnienie składni opkodu IA32?
Gdzieś miałem i mi wsiąknęło gdy potrzebne.
Z góry dzięki.
🟦 shoorick
🖊️ 05:54 31-10-2012
Składnia zależy od Asemblera.
Standardowa jest składnia MASM.
Manuale firmy Intel (Intel 64 and IA-32 Architectures Software Developer's Manual) jej używają.
Ale w systemach Linux rozpowszechniona jest składnia AT&T, poczytasz o niej tu:
http://asm.sourceforge.net/articles/linasm.html
🟦 codex
🖊️ 16:36 31-10-2012
Nie no, składnia opkodu zależy od architektury cpu i nie ma nic wspólnego ze składnia masm, innego asemblera, ani też z systemem operacyjnym. Instrukcje Asemblera są przez kompilator zapisywane w postaci opkodów, które mają swoją składnię. Te z kolei są w odpowiedni sposób dekodowane przez procesor. Są to podstawowe informacje niezbędne do napisania kompilatora, więc myślałem, że uzyskam informacje w tym temacie ...

Ale może inaczej zapytam:
Jakiś deasembler, który pozwoli mi zdekodować bootsector systemu operacyjnego bym potrzebował. IDA wyświetla tylko wartości poszczególnych bajtów pliku.
🟦 shoorick
🖊️ 18:55 31-10-2012
No wtedy Intel Manual Volume II zawiera temat Instruction format ;)
🟦 codex
🖊️ 21:34 31-10-2012
No nie wiem co mam powiedzieć - tak przecież o to pytałem :) dużo tego chyba za dużo. Pójdę na skróty może tą drogą:
http://thestarman.pcministry.com/asm/index.html

Ale dzięki za pomoc.
🟦 shoorick
🖊️ 05:42 01-11-2012
Za dużo niestety, ale przez złożoność procesora. Lecz mogę poradzić wziąć jedną instrukcję. Na przykład: MOV i je studijować. Kiedy wyjaśnisz wszyści je warianty, inne instrukcje będą już łatwiej zrozumieć przez podobność.
Można napisać prosty program, lepiej w fasm.
Napisałeś:
mov al, bl
Skompilowałeś sam i przez fasm, a możesz porównać czy podobne wyniki są (nawet kiedy niepodobne są istnieje możliwość, że oba są poprawne, dlatego że pewne instrukcje mają kilka wariantów kodowania).
Albo używaj ten resource: http://ref.x86asm.net/coder32.html
Przez niego możesz deasemblować przez ręce.
Na przykład: kiedy spotkasz bajt 37h,
przyciskasz tam link http://ref.x86asm.net/coder32.html#x37 i trafisz do tablicy, odnajdziesz że to jest AAA opkod i tak dalej.
🟦 codex
🖊️ 07:25 01-11-2012
Tak dokładnie próbowałem to robić tak jak mówisz zanim napisałem na forum oczywiście, ale to żmudna robota by się z tego zrobiła, poniżej przykład:

format pe gui 4.0
   entry  start
   include win32ax.inc
   include n\codehelp.inc

section .import import data readable
library kernel32,kernel32,user32,user32.dll
        include   api\kernel32.inc
        include   api\user32.inc

section .noname code readable executable
start_bis:
        ret

section .flat code data readable writeable executable

        table:
                int     12h
safespace        rb     100
        sizeof.table    = ($-table)

start:

        xor     eax, eax
        mov     al, [table +0]
        show    eax, eax
        ret

;       WYNIKI:
;       ------------------------------------------------------------------
;       CD 10                   = INT         10h
;       CD 13                   = INT         13h
;       ------------------------------------------------------------------
;       B8                      = mov         eax, 0
;       BB                      = mov         ebx, 0
;       B9                      = mov         ecx, 0
;       BA                      = mov         edx, 0
;       ------------------------------------------------------------------
;       EB  FE                  = jmp short   label
;       FF  E0                  = jmp         eax
;       E9  FB EF FF FF         = jmp         00 40 30 00  (start_bis)
;       ------------------------------------------------------------------
;       FA                      = cli
;       FB                      = sti
;       31 C0                   = xor         eax, eax
;       31 DB                   = xor         ebx, ebx
;       ------------------------------------------------------------------
                                                                                
Teraz cel jest taki:
Przeanalizować co jest w bootsektorze, a co powinno być, czyli krótko mówiąc - czy nie ma bonusów jakichś :) .Przyznasz, ze taką metodą to ja bym szybko tego nie ustalił.

Co do tej tablicy - już lepiej spróbuję tą metodą, konkretny link wrzucę w zakładki, bo na pewno nie raz się przyda - dzięki.

PS. Jeżeli piszesz w fasm na co dzień, to może wymienimy się jakimiś projektami ... wyślę Ci maila na PW.
🟦 shoorick
🖊️ 07:45 01-11-2012
Z fasm możesz zrobić program z jedyną linie:
mov al,bl

Wynik:
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F


00000000   88 D8                                              
🟦 codex
🖊️ 08:16 01-11-2012
Tak wiem. Nawet kiedyś tam miałem nabazgrane coś podobnego.
Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów witryny haker.com.pl oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.