Nasm x86 32 bit

...IDE, compilers, κλπ

Συντονιστής: konnn

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 02 Νοέμ 2008, 10:37

Κώδικας: Επιλογή όλων


title main

dosseg

.model small

.stack 100h

.data



nl db 10,13,'$'

message1 db 'Please enter a string: $'



buf db 20

actlen db ?

store db 20 dup ('$')



buf1 db 20

actlen1 db ?

store1 db 20 dup ('$')







.code



PUBLIC _length

EXTRN _asm2pas:PROC



start:

mov ax,@data

mov ds,ax





mov ah,09h

lea dx,message1 ;emfanizei to 1 mnm

int 21h



mov ah, 0ah

lea dx, buf ;diabazei to string

int 21h







lea dx,store1 ;push store1

push dx





lea dx,store ;push store

push dx











CALL _asm2pas



mov ax, 4C00h

int 21h



;-------------------------------------------





_length proc





push bp





mov bp, sp

mov di,[bp+4]

mov bx,0







lab:

cmp cl, 0Dh

je telos



mov cl,store[bx+1]

inc bx



jmp short lab



telos:



mov ax,bx



pop bp





ret

_length endp





end start













Κώδικας: Επιλογή όλων



/*

Assembly connection :

- calls ext ASM func "length"

- passes a string of chars

- gets the result (string's length)

*/



extern unsigned int cdecl length( char*, char );



unsigned int asm2pas( char* str, char* res ) /* public by default*/

{

unsigned int len;

int i;

len = length( str, 13 ); /* in ASM arguments are in reverse */



for ( i=0; i<len; i++ ) /* copy string */

res[i+1] = str[i];

res[0] = len;

/* PASCAL string bears length on char[0] */

return len;

}






εγω ψαχνω ενα τετοιο προγραμμα σε NASM assembly απλα αυτο που εχω σε MASM 16 bit assebly δεν ξερω να το μετατρεψω σε NASM 32 bit Assebly μηπως μπορω να το βρω απο καπου ή περιπου ενα παρομοιο προγραμμα :oops:


edit:

κατι αλλο πως γινεται να μεταγλωττισω το C προγραμμα που εχω πιο πανω για να παρω κατευθειαν των κωδικα σε γλωσσα assembly για NASM 32 bit linux?? γενικα γινεται αυτο να παρω τον κωδικα χαμηλου επιπουδου οταν εχω μεταγλωττιση τον κωδικα υψηλου επιπεδου?
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό cyberpython » 02 Νοέμ 2008, 12:56

thodoris_turtle έγραψε:
κατι αλλο πως γινεται να μεταγλωττισω το C προγραμμα που εχω πιο πανω για να παρω κατευθειαν των κωδικα σε γλωσσα assembly για NASM 32 bit linux?? γενικα γινεται αυτο να παρω τον κωδικα χαμηλου επιπουδου οταν εχω μεταγλωττιση τον κωδικα υψηλου επιπεδου?


Κώδικας: Επιλογή όλων
gcc -S <αρχείο σε C>
Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών / Ubuntu-gr / My Web Log
Επίπεδο Γνώσεων Linux: Μέτριο, Προγραμματισμός: Ναι, Aγγλικά: Καλά
Λειτουργικό : Ubuntu 10.04 - 32bits
Η/Υ : Intel Core2 4400@2 GHz / 2GB DDR2 RAM / GeForce 8400 GS 512MB / Creative SB Audigy SE
Άβαταρ μέλους
cyberpython
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 733
Εγγραφή: 14 Μάιος 2008, 13:22
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 02 Νοέμ 2008, 14:16

ο κωδικας που θελω να μετατρεψω σε Nasm 32 bit για linux ειναι ο :

http://pastebin.com/m36cd2c12

οταν πληκτρολογο στο terminal την εντολη gcc -S Micro1c.c μου εμφανιζει σφαλματα δεν ξερω γιατι συγκεκριμενα μου εμφανιζει τα παρακατω:

http://www.imageshack.gr/view.php?file= ... tes7bw.png

εχεις καμια ιδεα ?


edit:

χμμ μαλων σε λαθος κατευθυνση κινουμε πρεπει να παρω τον source κωδικα για MASM 16 bit και να προσπαθησω να το μετατρεψω σε NASM 32 bit

Ξερω οτι εκει που λεει ας πουμε ax πρεπει εγω να βαλω το eax .

Και το θεμα της διευθυνσειωδοτησης πρεπει να αλλαξει δεν ειναι δηλαδη μονο να πειραξω το ax και να τα κανω eax

εκει μπερδευομαι εγω πιστευω λογικο ειναι αυτο

να ρωτησω και κατι αλλο οσων αφορα για το gcc -S FileName

εστω οτι θελω να μετατρεψω σε assembly το http://pastebin.com/m1b0e7b22

και στο terminal πληκτρολογο gcc -S printf1.c

ο κωδικας assembly http://pastebin.com/m3e2eb332 :lol:

και μου εμφανιζει στο τρεχων καταλογο το printf1.s η επεκταση s τι σημαινει. ειναι απο το source δηλ. source assembly? αυτο?

καλη φαση αυτη δηλαδη ας πουμε οτι καποιος βαζει σαν εργασια μια bubble sort να το κανουμε σε assembly αρα εγω σαν βοηθεια μπορω να χρησιμοποιησω αυτα που λες

αλλα τελος παντον βγαινω εκτος θεματος το προβλημα μου ειναι τωρα να μετατρεψω MASN 16 bit σε NASM 32 bit

αυτο ειναι τωρα το προβλημα μου.

edit:

σορι πως γινεται να κανω την αντιστροφη διαδικασια δηλ. να μετατρεψω ενα κωδικα assembly σε γλωσσα C? :lol:
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό simosx » 02 Νοέμ 2008, 14:50

thodoris_turtle έγραψε:ο κωδικας που θελω να μετατρεψω σε Nasm 32 bit για linux ειναι ο :

http://pastebin.com/m36cd2c12

οταν πληκτρολογο στο terminal την εντολη gcc -S Micro1c.c μου εμφανιζει σφαλματα δεν ξερω γιατι συγκεκριμενα μου εμφανιζει τα παρακατω:

http://www.imageshack.gr/view.php?file= ... tes7bw.png

εχεις καμια ιδεα ?


edit:

χμμ μαλων σε λαθος κατευθυνση κινουμε πρεπει να παρω τον source κωδικα για MASM 16 bit και να προσπαθησω να το μετατρεψω σε NASM 32 bit

Ξερω οτι εκει που λεει ας πουμε ax πρεπει εγω να βαλω το eax .

Και το θεμα της διευθυνσειωδοτησης πρεπει να αλλαξει δεν ειναι δηλαδη μονο να πειραξω το ax και να τα κανω eax

εκει μπερδευομαι εγω πιστευω λογικο ειναι αυτο

να ρωτησω και κατι αλλο οσων αφορα για το gcc -S FileName

εστω οτι θελω να μετατρεψω σε assembly το http://pastebin.com/m1b0e7b22

και στο terminal πληκτρολογο gcc -S printf1.c

και μου εμφανιζει στο τρεχων καταλογο το printf1.s η επεκταση s τι σημαινει. ειναι απο το source δηλ. source assembly? αυτο?

καλη φαση αυτη δηλαδη ας πουμε οτι καποιος βαζει σαν εργασια μια bubble sort να το κανουμε σε assembly αρα εγω σαν βοηθεια μπορω να χρησιμοποιησω αυτα που λες

αλλα τελος παντον βγαινω εκτος θεματος το προβλημα μου ειναι τωρα να μετατρεψω MASN 16 bit σε NASM 32 bit

αυτο ειναι τωρα το προβλημα μου.


Στο στιγμιότυπο (screenshot) που δείχνεις, γίνεται αναφορά για σφάλμα στη γραμμή 23. Υπάρχει κάποιος παράξενος χαρακτήρας εκεί, πρέπει να τον σβήσεις.

Ακόμα, στον κώδικα υπάρχει αναφορά για cdecl, που είναι μια εντολή που έχει να κάνει με περιβάλλον DOS/Windows.
Σε Linux και gcc, το cdecl είναι προεπιλογή οπότε δε χρειάζεται να το βάλεις. Κοίταξε στο
http://www.programmersheaven.com/2/Calling-conventions
για περισσότερα.

Το πρόγραμμα που θέλεις να μεταγλωττίσεις δεν είναι πλήρες πρόγραμμα. Για παράδειγμα δεν υπάρχει main().
Οπότε μπορείς μόνο να μεταγλωττίσεις προς «αρχείο αντικειμένου» (object file). Δηλαδή,

gcc -c -S Filename.c

Εδώ μπαίνει ένα -c που σημαίνει να μην παραχθεί ολοκληρωμένο εκτελέσιμο.

Γενικά, σημαντικό πιστεύω για σένα είναι να βρεις τεκμηρίωση που να περιγράφει αυτά που θέλεις να μάθεις.
Προσπάθησε να κάνεις αναζήτηση με π.χ «linux γλώσσα μηχανής» για να βρεις σχετικές ελληνικές σελίδες, αν υπάρχουν.
Υπάρχουν ξένες σελίδες π.χ. στο nasm, που εκεί ίσως χρειαστεί να έχεις το Google Translate από κοντά.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 02 Νοέμ 2008, 15:04

οκ θα το ψαξω οποτε ξαναβρω ελευθερο χρονο παντος ευχαριστω πολυ .ενταξη μπορει να μην τα καταλαβαινω αλλα θα δουμε τι θα γινει . ο θεος βοηθος :lol:
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 25 Μαρ 2009, 14:06

Γεια σας και παλι προσπαθω να καταλαβω τον Nasm . μηπως ξερει κανεις κανεναν assembler ο οποιος να εχει την ιδια συνταξη με τον MASM ??

γιατι ο nasm εχει διαφορετικη συνταξη αυτο το διαβασα σε ενα φορουμ της σχολης SYMMY του ntua(κοινοτητα ελευθερου λογισμικου )

κατι αλλο εχω τον εξης κωδικα σε nasm 32 bit ο οποιος ουσιαστικα αυτο που θελω να κανω ειναι να τυπωνει στην οθονη του υπολογιστη το μηνυμα hello TEO!!!

το προγραμμα ειναι το εξης :
Κώδικας: Επιλογή όλων


section .data

string1 db "Hello TEO!!!",10
len equ $-string1


section .text
global _start
_start:
xor eax,eax
inc eax
while:
mov eax,4
mov ebx,1
mov ecx,string1
mov edx,len
int 80h

inc eax

cmp eax,10
jmp end


end:
mov eax,1
xor ebx,ebx
int 80h

; edw mou emfanizi mia fora to Hello TEO !!! giati???? oeo


το ετρεξα με τις εντολες nasm -f elf a5.asm και ld -s -o a5 a5.o
και μετα ./a5
και μου εμφανιζει στην οθονη μια φορα το μηνυμα Hello TEO!!! και οχι πολες φορες το μηνυμα

αυτο γιατι τι λαθος εχω κανει εδω? προσπαθω να υλοποιησω το while loop για να μου τυπωνει ενα μηνυμα πολλες φορες :)

ευχαριστω εκ των προτερων για τον χρονο σας :)

Edit :

α ξεχασα να ρωτησω και κατι αλλο
μηπως ξερετε κανενα καλο tutorial για να παντρεξω C με assembly δηλαδη ενα προγραμμα σε C να καλη για συναρτηση σε assembly για να μετραει για π.χ το μηκος ενος string etc

αμα ξερετε σας παρακαλω ας ποσταρη καποιος ή καποια

και παλι ευχαριστω εκ των προτερων για τον χρονο σας :)
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 10 Απρ 2009, 09:48

Για σας τις προαλες εγκατεστησα τον ddd (dispay date debugger) sudo apt-get install ddd

σκοπος μου ειναι να κανω debugging ενα προγραμμα assembly γιατι δεν ξερω που εχει προβλημα μου εμφανιζει segmentation fault

πληκτρολογο στο terminal ddd μετα παω στο open programs και επιλεγο a.out αλλα δεν μου εμφανιζει τον πηγαιο κωδικα για να βαλω break points

τι φταιει σιγουρα κατι κανω λαθος

ευχαριστω εκ των προτερων για τον χρονο σας
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό sokoban4ever » 10 Απρ 2009, 12:18

Κάνε:
Κώδικας: Επιλογή όλων
man ddd

και δες μια εδώ :
http://www.gnu.org/manual/ddd/html_mono/ddd.html
ελπίζω να βρείς κατι
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 10 Απρ 2009, 18:04

ευχαριστω παρα πολυ αλλα εχω ακουσει οτι πρεπει να βαλω μια παραμετρο στον gcc δεν ξερω ποια ειναι αυτη για να μπορει ο ddd να εμφανισει το κειμενο


εχω μπερδευτη λιγο αστα να πανε :(
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

Φιντέλ Κάστρο Ρους
31 Ιούλη του 2007
Άβαταρ μέλους
thodoris_turtle
punkTUX
punkTUX
 
Δημοσιεύσεις: 187
Εγγραφή: 28 Αύγ 2008, 15:18
Τοποθεσία: Άνω Γλυφάδα
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό sokoban4ever » 10 Απρ 2009, 18:12

εδώ :
http://www.it.uom.gr/teaching/c_sys/ddd/DDDsample.html
λέει :
Κώδικας: Επιλογή όλων
gcc -g -o sample sample.c

σου λέει κάτι ?
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού

cron