Bun venit pe SkullBox!

Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
  Pagini: [1] 2
  Imprimă  
eniAsm  (Vizualizari 965)
3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Apr 11, 2008, 19:45

De ceva vreme,in timpul meu liber,lucrez la o aplicatie care as vrea sa o cred "incepator de desteapta" numita eniAsm.
eniAsm este un proiect open source care vrea sa fie odata si odata un assembler cat de cat veritabil.Am spus ca este "incepator de destept" referindu-ma pur la stadiul in care se afla,si nu la performantele lui.
Practic eniAsm este un assembler un pic mai special fata de celelalte assemblere.El este destinat[doreste sa fie] incepatorilor in domeniul "asm".

"Specialitatea" lui este dictata de restrictiile de limbaj:
- fiecare instructiune se termina in virgula,iar exceptia o fac etichetele[labelurile] care se termina in 2 puncte [:]
- pentru instructiunile de 2 parametri,cuvantul de legatura intre cei 2 parametri este "to"
- fiecare instructiune/eticheta vine scrisa pe rand propriu
- commenturile se pot face cu ajutoru asterixului *. exemplu: "*acesta este un comment"
- pot exista spatii intre 2 instructiuni din program pentru a mari lizibilitatea
- valorile numeice existente in instructiune sunt in baza 10,iar nu in baza 16 cum sunt in alte assemblere

In viitor se doreste o customizare a instructiunilor in functie de nevoile utilizatorului.Spre exemplu,instructiunea normala "mov",implementata in limbaj ca si "move" sa poata fi recunoscuta in sursa ca "muta" de exemplu,dar astea sunt planuri de viitor Smile

Proiectul il puteti descarca de aici. [E in engleaza pentru ca incerc sa public datele mele si pe siteul meu,pe masura ce se deruleaza programul,si vreau sa fie perceput de cat mai multi].Versiunea curenta este V0_7.

Proiectul e facut in C++,intentionat pentru Borland Developer Studio 2005,dar exista posibilitatea pentru integrare si in alte sisteme[prin sursele din directorul "crude sources"].In arhiva veti gasi atat sursele cat si cateva exemple de inceput de drum pentru assembler.

Sa luam un exemplu mai "special" , facut pentru skullbox:
Cod:
*program intended for the skullbox community
*prints "hello eniasm!" several times
*assembled with eniasm v0_7
move 5 to cx,
move 0 to dh, *row
move 0 to dl, *column

ciclu:
*set cursor position
move 2 to ah,
move 0 to bh,
inter 16,

*print "hello eniasm!"
move 0 to bh,
move 14 to ah,

move 'h' to al, *prints 'h'
inter 16,
move 'e' to al, *prints 'e'
inter 16,
move 'l' to al, *prints 'l'
inter 16,
move 'l' to al, *prints 'l'
inter 16,
move 'o' to al, *prints 'o'
inter 16,
move ' ' to al, *prints ' '
inter 16,
move 'e' to al, *prints 'e'
inter 16,
move 'n' to al, *prints 'n'
inter 16,
move 'i' to al, *prints 'i'
inter 16,
move 'a' to al, *prints 'a'
inter 16,
move 's' to al, *prints 's'
inter 16,
move 'm' to al, *prints 'm'
inter 16,
move '!' to al, *prints '!'
inter 16,

incr dh,
incr dl,
loop ciclu,

move 0 to ah,
inter 22,     *waits for key from keyboard
rets,
Dupa ce asamblati cu eniAsm , cu optiunea isDebugging=1,veti vedea ceva asemanator:


Ceea ce vedeti voi este raportul assamblarii...codul fiecarei instructiuni precum si continutul fisierului asamblat.
Sa vedem ce face programul:


Nu e cine stie ce,dar merge! Tongue
In interiorul arhivei este un document word care specifica modul de asamblare precum si instructiunile suportate.

Cam atat pentru moment,viitorul nu stiu ce imi rezerva,fac proiectul asta din placere si sa mai inteleg cate ceva din instructiunile de asamblare.O versiune personalizata cu comenzi skullbox este posibila Winking
Un lucru e cert: proiectul va continua !

Sunt curios ce parere aveti despre initiativa si orice sugesti/hint/ajutor efectiv este apreciat Smile
Pana la urmatorul release,pe curand [pe tema releasurile cel putin Tongue] !
by 3Nigma 11Aprilie 2008
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
zapakitul
*

Conectat Conectat

Mesaje: 1475

eniAsm, Apr 12, 2008, 16:48

O mica intrebare: O sa ie cross platform? Adica pot sa il folosesc si sub linux Love struck?
Memorat

A DS , my kindom for a  DS!

Un Pc De Carcasa Noua Blog
redkar23
*

Deconectat Deconectat

Mesaje: 152

WWW
eniAsm, Apr 12, 2008, 16:53

suna bine Big grin e open-source ?  [edit]Ms,AdyX. nam citit inceputul postului[/edit]

Can we see some source code ? Big grin
[editat..iar] Jur k nici eu nam vazut linku spre sursa Laughing [/editat]
Cheers
Memorat


What doesn't kill you, makes you stronger .       - Friedrich Nietzsche
O noua definitie a ironiei : life itself .                 - Redkar23
AdyX
*

Conectat Conectat

Mesaje: 1061

WWW
eniAsm, Apr 12, 2008, 17:00

Citat din mesajul lui: 3Nigma
eniAsm este un proiect open source care vrea sa fie odata si odata un assembler cat de cat veritabil.
Nu... Smile
Memorat
DranaXum
*

Deconectat Deconectat

Mesaje: 34

WWW
eniAsm, Apr 12, 2008, 17:44

Opinie: Practic tu interpretezi ce scrii in editbox, parsezi si folosesti comenzile ASM cu parametrii dati de tine. Mi s-ar fi parut mult mai interesanta dezvoltarea unui limbaj gen java, ce necesita runtime din cauza ca in spatele acelui interpretor ar fi fost mult mai multa bataie de cap.

In legatura cu move si muta ai putea instructiunile sa le tii intr-o baza de date. Din optiuni alegi sintaxa (si baza de date implicit). Cand pornesti parsarea te folosesti de acea baza de date. Acum depinde de tine, cum ai creat in prima faza codul: cat de flexibil e etc.

Oricum, keep up the good work!
Memorat

Puterea izvoraste din capacitatea omului de a gandi!
http://dranaxum.wordpress.com
3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Apr 12, 2008, 22:14

Cati ani ai DranaXum? Scuza-ma ca te iau asa,dar tu imi vorbesti de parca nu prea ai fi pus la curent cu ce face proiectul...
Citat din mesajul lui: "DranaXum"
Practic tu interpretezi ce scrii in editbox, parsezi si folosesti comenzile ASM cu parametrii dati de tine
Te asigur ca nu e asa de usor...eu nu interpretez nimic ca si comenzi ASM,totul este generat de mine in cod masina,e cel mai low level cu putinta...singurele dependente in program sunt legate implicit de proiect si nu de vreun assembler exterior.
Cat despre optiuni cu baze de date...la ce ar ajuta? atatea dependente pentru un assembler,il strici si se pierde si notiunea pe drum.
Nu inteleg unde vrei sa bati cu java,totusi...ca sa faci un limbaj mai inalt,tot la asm recurgi,in fond,nu?

zapakitule Smile ... nu,cel putin nu intentionez eu sa-l dezvolt pe linux. Arhiva,poate ai observat,contine "raw sources"...daca vrea cineva sa incerce sa-l porteze pe gcc e invitatul meu Smile ,poate o colaborare ceva hee hee
redkar23 sunt surse in arhiva...primitive,dar bune pentru a demonstra implementarile curente
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
!_30
*

Conectat Conectat

Mesaje: 628

WWW
eniAsm, Apr 12, 2008, 22:34

Am vazut si la tine pe site proiectul , dar mi-am cam prins urechile pe acolo  Tongue  Insa totusi m-ai facut curios . Deci sa presupunem ca avem comanda :  move 2 to ah . Muta in ah , constanta 2 . Tu iei , parsezi comanda [ afli ce trebuie sa se intample pe acolo ] si transformi "ideea" in cod masina ? ( la compilare ) Te rog sa ma corectezi daca vorbesc prostii . Sunt la inceput de drum cu ASM-ul  Big grin
   Practic numerele alea de la sfarsit , din Program file contains reprezinta instructiunile , adresele instructiunilor/variabilelor sau ? .. Curiozitatea bat-o vina Smile
Memorat

3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Apr 12, 2008, 22:53

!_30 ... bytesi aia din "program file contains" sunt practic byetsi asa cum se gasesc ei in programul asamblat.
si da,parsez "ideea" in echivalentul ei in cod masina,practic calculez opcodurile in functie de instructiune si parametri.

In functie de ce instructiune dai tu,asamblatorul face ce face orice alt assembler,interpreteaza instructiunile,calculeaza opcodurile[byetsi numerici ce reprezinta instructiunea] si in final pune totul impreuna pentru a scoate programul.

Nu'i problema,satisfac curiozitati...keep them coming  Tongue
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
astan
*

Deconectat Deconectat

Mesaje: 357

eniAsm, Apr 13, 2008, 00:47

M-am uitat putin peste surse si am cateva intrebari/sugestii:

1. In fisierul eAsm_debug.h, sunt niste definitii de functii non inlined. E vreun motiv pentru care nu sunt puse intr-un fisier cpp si sunt puse intr-un header ?
2. La fel, fisierul eAsm_x86Instruction.h contine nu numai declaratia clasei x86Instruction ci si implementarea ei. De obicei, functiile membre non-inlined se pun in fisiere cpp.
3. De obicei, fisierele header ar fi bine sa fie guardate prin if def-uri
#ifndef my_header_h
#define my_header_h
..... continutul header-ului
#endif
4. In functia instr_type x86Instruction::getInstrType(char *com) exista secvente de cod de genul:
if(strstr(com,"add ")==com) toRet=e_add;
if(strstr(com,"clearcf")==com) toRet=e_clearcf;
if(strstr(com,"cleardf")==com) toRet=e_cleardf;
if(strstr(com,"clearif")==com) toRet=e_clearif;
....

Nu cumva ar trebui :
if(strstr(com,"add ")==com) toRet=e_add;
else if(strstr(com,"clearcf")==com) toRet=e_clearcf;
else if(strstr(com,"cleardf")==com) toRet=e_cleardf;
else if(strstr(com,"clearif")==com) toRet=e_clearif;
....

ca sa eviti comparatiile inutile dupa ce ai identificat deja comanda. Totusi, m-am uitat pe cod doar 10 minute, s-ar putea sa fi inteles gresit. Aceeasi intrebare si in legatura cu instr_operands x86Instruction::getRegister(char *reg)

4. Din clasa eAsm_compiledProgram, se pare ca asamblorul nu poate sa gestioneze programe avand mai mult de 50 de etichete ... De ce aceasta limitare in loc sa se foloseasca o structura dinamica, de exemplu o lista ? Daca utilizatorul are un program avand mai mult de 50 de etichete, ce se intampla ? Se intoarce o eroare ?

Presupun ca vrei sa adaugi to setul de instructiuni. In cazul acesta, algoritmul de de comparatie succesiva de siruri s-ar putea sa devina prea lent. Recomand sa modifici codul si sa implementezi metode de cautare mai rapide, eventual folosind o tabela de dispersie. Nu stiu daca e cazul, daca cautarea va deveni prea lenta dupa ce vei adauga toate instructiunile, dar e o metoda care merita luata in considerare.
Memorat
3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Apr 13, 2008, 08:13

ma bucur pentru feedbackul tau.
standardele distributiei de proceduri inline nu imi sunt cunoscute. Ce standarde sunt acestea? ca sunt curios...asta referitor la afirmatiile 1 si 2.
afirmatia 3...sugestie notata,nu am implementat directive de procesor desi sunt perfect constient de ele.
afirmatia 4...are o explicatie perfect logica Smile : nu vor ramana in formatul asta verificarile. Am spus ca voi face ca instructiunile sa fie customizate in sens ca utilizatorul va putea sa-si defineasca propria varianta pentru instruciunea move actuala din easm sa zicem,la fel si cu registry...nu se lucreaza prea mult la functiile respective deoarece vor fi depasite de indata Smile
Dimensiunea vectorului de etichete este pur formala...proiectul este actualmente mai mult in faza de debug decat in faza de run. Un sistem mai bun de gestionare a instructiunilor prin liste dinamice este "programat" sa apara in versiunile ulterioare...

fii sigur ca am o lista de sarcini/optimizari pe care le parcurg si incerc sa le realizez...
mersi inca odata ca te-ai interesat in surse si ca ai si postat pareri bune.
daca mai ai sugestii/pareri...fa-mi-le publice  Winking
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
DranaXum
*

Deconectat Deconectat

Mesaje: 34

WWW
eniAsm, Apr 13, 2008, 13:01

Ma scuzi enigma, nu ma uitasem dinainte pe sursa (nu vazusem linkul), asa ca imi retrag cuvintele deoarece ce am zis eu in postul trecut chiar nu se potrivea cu ce ai facut tu.
Memorat

Puterea izvoraste din capacitatea omului de a gandi!
http://dranaxum.wordpress.com
astan
*

Deconectat Deconectat

Mesaje: 357

eniAsm, Apr 13, 2008, 16:04

Am deschis un nou topic privind impartirea codului intre fisiere header si de implementare in rubrica C/C++, sugestiile sunt utile intr-un cadru mai larg.
Memorat
!_30
*

Conectat Conectat

Mesaje: 628

WWW
eniAsm, Apr 14, 2008, 20:07

Inca o curiozitate 3Nigma . Ce materiale ai folosit pentru a invata "asamblare" si in prealabil sa reusesti sa faci eniAsm . Nu ma refer la partea de programare , ci doar la "cunostintele" legate de asamblare . Asa instructiuni si alte cateva chestii mai neinteresante se gasesc , dar low-levelul e mai complicat . Ai putea sa-mi dai exemplu de cateva materiale de studiu ?
   Am vazut ca tu la fiecare comanda [ in screenshotul de mai sus ] calulezi / afli niste numere . De exemplu move 5 to cx si rezulta 185 5 0 . Ce inteleg eu este ca fiecare comanda are un opcode [ nu prea inteleg eu ce si cum e cu opcode-ul ] , un numar si apoi operatorii alte numere . Stiu ca aberez , dar daca ai putea sa-mi dai niste explicatii sa nu mor curios pana reusesc sa mai inteleg si eu ce si cum e cu assemblerul asta . Am vazut eu ca fiecare "comanda" data procesorului ar fi o secventa " opcode / date / etc .. " multe chestii dar nu m-am prins ce si cum .  :rolleyes:
Memorat

3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Apr 15, 2008, 16:19

!_30 scuze pentru raspunsul intarziat.
Vei gasi tot ce ai nevoie aici : http://www.intel.com/design/Pentium4/documentation.htm
Ca sa faci un assembler trebuie sa sti cum functioneaza un procesor, apoi sa stii instructiunile specifice fiecarui procesor si in cele din urma sa faci parserul. Nu e mare filozofie,doar ca e mult Straight face
Daca mai ai nedumeriri,spune Smile.
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
3Nigma
*

Conectat Conectat

Mesaje: 981

WWW
eniAsm, Mai 14, 2008, 16:47

ceva vreme mai tarziu... v0.8 a fost creat!.
cateva precizari:
-versiunea vine cu un ide rudimentar ca userul sa nu mai fie nevoit sa lucreze cu periferice gen Notepad
-implementat sistemul de fisiere ".easmcl" care permit programatorului sa isi defineasca setul de instructiuni proprii
-adaugat un numar de 43 de instructiuni noi din care iasa exemple mai frumoase dupa cum vom vedea Smile
-conceptul de "jump" merge atat in avans cat si inapoi in program pe offseturi de 8 biti momentan
-curatat si "bibilit" codul

Mai multe detalii despre versiune le puteti gasi aici [in engleza].

Un screen pentru a demonstra de ce e in stare[gasiti codul pe pagina de mai sus]:


by 3Nigma 14Aprilie 2008  :cool:
Memorat

Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...

"Ambition is a lame excuse for the ones that are not brave enough to be lazy..."
SkullAds
Ecspert
ReclAmator
* * * * *
Google AdSense

Gen: Bărbat
Mesaje: Multe

Reclama AdSense,
 

 
   


Pagini: [1] 2
  Imprimă  
 
Schimbă forumul:  

Ethical hacking and programming community
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro