banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 21 Jul 2025, 11:24

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 12 Posta ] 
Autoru Poruka
PostPoslato: 02 Okt 2006, 12:37 
OffLine
Majstor
Majstor

Pridružio se: 23 Jan 2006, 17:58
Postovi: 872
Pozdrav svima!

Treba mi pomoć iskusnih .COM format programera. Napisao sam jedan compiler za Intel-procesor, 32-bit addressing mode. Instrukcije pišem u .COM file, koji standardno radi u 16-bit addressing mode. Da bih određene instrukcije koje se tiču registra i operanada izvršavao u 32-bit modu, moram svaku takvu instrukciju da prefix-ujem sa jednim byte-om - 66h. To sam uradio ali čini se da windows-ov 'debug' tool ignoriše taj prefix i dalje radi u 16-bit modusu, posto kad startujem disassemblera vidim da sve interpretira u 16-bit modusu.
Ako neko zna gdje bi moglo da koči neka javi, treba mi do srijede naveče. Ako nadjem drugim putem (a naći ću) napisaću ovdje kako da se riješi (a riješit ću :D ) problem.

Veliki pozdrav!


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 02 Okt 2006, 13:51 
OffLine
Urednik
Urednik

Pridružio se: 26 Jun 2003, 21:50
Postovi: 2669
Ja nisam iskusan .COM programer ;)

Medjutim, imam pitanje, nije li informacija o "bitnosti" aplikacije sadrzana u headeru .COM fajla? Znaci osim sto si dodao po dva byte-a, da li si popravio i header? (izvinite na nubizmu)


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 02 Okt 2006, 14:12 
OffLine
Majstor
Majstor

Pridružio se: 23 Jan 2006, 17:58
Postovi: 872
DOS-COM format nema header, zbog toga ga je jednostavno koristiti za debugging i u emulatorima. Prvi byte je pocetak prve instrukcije, svi segmenti imaju istu startnu adresu, znaci radis u real-mode-u. Sistem ucita fajl na slobodni segment, adresu 0x0100 i izvodi prvu instrukciju. Ako budes ikada pisao kompajlere za intel, testiraces vjerovatno sa COM fajlovima svoj kod posto je najjednostavnije.
Ovo u vezi dodavanja dva byte-a: radi se o jednom bytu, to ti je kao neki signal za procesor da instrukcija koja slijedi radi u drugom adresnom modusu. Npr, ako je standardni modus 16-bit-a, onda salta na 32-bita i obrnuto, ako je standard 32-bita, salta na 16 bit-a. Posto je standardni modus za COM format 16-bitova, moras mu nekako reci da prebaci na 32-bit-ni modus, i zato stavljas ispred svake kriticne instrukcije taj prefix, 66h. Kod DLL i EXE imas sve informacije u HEADER-u.

Pozdrav!


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 09:11 
OffLine
Urednik
Urednik

Pridružio se: 26 Jun 2003, 21:50
Postovi: 2669
Aha, zanimljivo! Nadam se da ce biti asemblera na fakultetu :)

Poz


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 10:41 
OffLine
Početnik
Početnik

Pridružio se: 29 Sep 2006, 12:07
Postovi: 53
Lokacija: Prnjavor, RS
che.guevara je napisao:
Aha, zanimljivo! Nadam se da ce biti asemblera na fakultetu :)

Poz


Ned'o Bog! :D Asembler osim da studenat nauči kako arhitektura funkcioniše i nema druge upotrebljivije funkcije osim ako ne radiš za nekim radikalnim hardcore low level programming projektima.Kad smo počeli sa asemblerom na fakultetu ja sam mislio da ću da pošizim :lol: .Kako to može da bude nervirajuće.


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 11:20 
OffLine
Urednik
Urednik

Pridružio se: 26 Jun 2003, 21:50
Postovi: 2669
Bogme, meni je taj asembler vec podobrano poznat, i volio bih da ga "obvladam" :)

Ili Scheme npr ... Funkcionalno programiranje je bas zanimljiva programerska paradigma, a retko ko ovdje zna ista o tome. Meni su svi jezici zanimljivi :P


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 12:52 
OffLine
Početnik
Početnik

Pridružio se: 29 Sep 2006, 12:07
Postovi: 53
Lokacija: Prnjavor, RS
I meni su svi jezici zanimljivi i volio bih da ih znam ali da ih učim, ne pada mi na pamet :lol: .Mnogo može da bude frustrirajuće! Kao kad smo morali da radimo neke mozak ispirajuće zadatke u asembleru (RISC i CISC) koji nemaju blage veze s mozgom ali morao si da ih uradiš, jao! Ali dobro, ja opet volim svašta da radim samo ne ono što treba.


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 13:44 
OffLine
Početnik
Početnik

Pridružio se: 15 Avg 2006, 22:48
Postovi: 65
Lokacija: Sipovo, Republika Srpska
svaki programer bi trebao da zna parce asemblera, ako zeli da zna kako radi racunar. ja ga malo znam, ali ubrzo bi trebao poceti uciti detaljnije. izmedju ostalog, vrlo je zanimljiv ;)

_________________
Mladost neopravdava besvest.


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 16:24 
OffLine
Majstor
Majstor

Pridružio se: 23 Jan 2006, 17:58
Postovi: 872
Znaci moram cekati da pozavrsavate fakultete da mi pomognete :D :-)

Tesko je naci ljude koji pisu kompajlere koji proizvode direktno masinski kod, zato nisam ni bio previse optimistican, ali mozda mi mozete pomoci indirektno: treba mi jedan emulator u kojem mogu da pisem instrukcije za 32-bitne registre, npr:

Kod:
MOV EAX, EBX.


a koji se moze kompilirati u COM format. Znaci emulator pise instrukcije za 32-bitni modus u format ciji je standard 16-bitni adresni modus.

Pozdrav!


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 16:38 
OffLine
Početnik
Početnik

Pridružio se: 29 Sep 2006, 12:07
Postovi: 53
Lokacija: Prnjavor, RS
A zašto ne pitaš na Elitesecurity forumu? Mislim da ćeš tamo naći to što tražiš.


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 04 Okt 2006, 17:00 
OffLine
Majstor
Majstor

Pridružio se: 23 Jan 2006, 17:58
Postovi: 872
Daniel, hvala ti mnogo za savjet, upravo sam to i uradio.

Veliki pozdrav!


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 10 Okt 2006, 15:48 
OffLine
Majstor
Majstor

Pridružio se: 23 Jan 2006, 17:58
Postovi: 872
Uspio sam rijesiti svoj problem bez 'debug' tool-a. Izgleda da 'debug' uopste ne mijenja moduse kad naidje na prefixe vec i dalje ostaje u 16-bitnom modusu. U nedelju sam skinuo biew tool za disassembliranje COM formata i sve je uredno disassemblovao - tamo gdje je bio prefix saltao je na 32-bita, a standardno je disassemblirao COM-fajl u 16-bitnom modusu. Dok nisam disassemblirao sa njim masinski kod, mislio sam da je problem u generisanom kodu.

Usput sam shvatio i vaznost jednog drugog prefixa, 0x67, koji koristite ili pojedinacno ili u kombinaciji sa 0x66. 0x66 je tzv. operand-size override attribute, kojim saopstavte procesoru da, ako je standardna velicina operanda 16 bita, da salta na 32 bita i obrnuto, kao sto sam vec spomenuo. Prefix 0x67 je tzv. effective-address override attribute, kojim saopstavate procesoru da za racunanje efektivne adrese koristi 32 bita.

Citava ova frka sa prefixima je zbog toga sto 16-bitne i 32-bitne instrukcije imaju isti opcode; zamislite da imate jednu JMP instrukciju iza koje odmah slijedi tzv. displacement, tj. za koliko byte-ova EIP (instruction pointer) mora da se pomjeri gore ili dole, znaci taj displacement je kodiran u instrukciji. Problem je sto procesor ne zna sam od sebe koliko byte-ova koji slijede iza opcode-a, predstavljaju taj displacement. Posto svaki code-segment ima u svom descriptoru zapisanu tu standardnu velicinu, procesor koristi tu informaciju da odredi koliko byte-ova displacement-a slijede iza opcode-a. Ako je standardna vrijednost code-segmenta (kao npr. kod real-mode, u kojem i radi COM) 16 bitova, a ja zelim da procesor procita 4 byte-a za displacement, moram da stavim operand-size override prefix, 0x66, ispred opcode-a.
Prefix 0x67 radi na slican nacin: ako npr. imam jednu instrukciju koja donese adresu iz jednog registra, a radim u standardnom 16-bitnom modusu, a hocu da procesor uzme 32 bita za adresu, onda stavim ispred opcode-a instrukcije prefix 0x67, i time kazem da procesor promijeni modus adresiranja sa standardnog na alternativni. Ovakav problem ne postoji sa 8-bitnim operandima i adresama jer takve 8-bit instrukcije imaju vlastiti opcode.

Pozdrav!


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 12 Posta ] 

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 0 gostiju


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs