Nasm x86 32 bit

...IDE, compilers, κλπ

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

Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 20 Οκτ 2008, 21:15

χμμ ειπα να εγκαταστησω(sudo apt-get install nasm) το Nasm για linux το θεμα ειναι οτι δεν εχω ιδεα πως να τρεξω ενα απλο προγραμμα μεσω του Nasm 32 bit x86 γιατι δεν εχω ασχωληθει ιδιαιτερα


βεβαιος δεν ειμαι εντελος ασχετος εχω δουλεψει σε windows για χ86 MASM αλλα για 16 bit και οχι για 32 bit

σε ποιο directory θα βρω τον NASM για να γραφω εκει το .asm αρχεια μου??

απλα αμα ειναι θελω καποιες βασικες οδηγιες για να τρεξω ας πουμε ενα απλο προγραμμα ας πουμε το hello world σε NASM χ86 32 bit σε linux

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

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

Re: Nasm x86 32 bit

Δημοσίευσηαπό cyberpython » 20 Οκτ 2008, 22:07

Πρώτα απ' όλα πρέπει να εγκαταστήσεις το nasm:
Κώδικας: Επιλογή όλων
sudo apt-get install nasm

και για μετατροπή του object code σε εκτελέσιμο (linking) το gcc (περιέχεται μαζί με άλλα χρήσιμα πραγματάκια στο meta-package build-essential):
Κώδικας: Επιλογή όλων
sudo apt-get install build-essential

Ας πούμε οτι έχεις τον παρακάτω κώδικα (τον βρήκα στη διεύθυνση http://www.csee.umbc.edu/help/nasm/sample.shtml γιατί με x86 assembly δεν έχω ασχοληθεί):
Κώδικας: Επιλογή όλων
; hello.asm a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst hello.asm
; link: gcc -o hello hello.o
; run: hello
; output is: Hello World

SECTION .data ; data section
msg: db "Hello World",10 ; the string to print, 10=cr
len: equ $-msg ; "$" means "here"
; len is a value, not an address

SECTION .text ; code section
global main ; make label available to linker
main: ; standard gcc entry point

mov edx,len ; arg3, length of string to print
mov ecx,msg ; arg2, pointer to string
mov ebx,1 ; arg1, where to write, screen
mov eax,4 ; write sysout command to int 80 hex
int 0x80 ; interrupt 80 hex, call kernel

mov ebx,0 ; exit code, 0=normal
mov eax,1 ; exit command to kernel
int 0x80 ; interrupt 80 hex, call kernel



Το αποθηκεύεις π.χ. στο /home/cyberpython/hello.asm
Ανοίγεις ένα τερματικό και πας στο /home/cyberpython/hello.asm
Έπειτα δίνεις την εντολή:
Κώδικας: Επιλογή όλων
nasm -f elf -l hello.lst hello.asm

και δημιουργείται το αρχείο hello.o
έπειτα δίνεις:
Κώδικας: Επιλογή όλων
gcc -o hello.bin hello.o

και δημιουργείται το hello.bin που το εκτελείς με :
Κώδικας: Επιλογή όλων
./hello.bin
Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών / 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 » 21 Οκτ 2008, 16:05

χμμ εισαι πολυ συνεργασιμος θα τα δοκιμασω αυτα που με εγραψες εδω και τωρα ευχαριστω πολυ μου δινεις κινητρο για να ασχωληθω και παλι thanx πολλα

α και κατι αλλο στα windows ποιος assembler υπαρχει για 32 bit

εγω ξερω τον Environ ειναι ενα zip αρχειο οπου περιεχει τον masn αλλα για 16 bit ξερεις ποιο πακετο υπαρχει αντιστοιχο για masn αλλα για 32 bit?
Τελευταία επεξεργασία από thodoris_turtle και 21 Οκτ 2008, 16:30, έχει επεξεργασθεί 1 φορά/ες συνολικά
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

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

Re: Nasm x86 32 bit

Δημοσίευσηαπό linuxman » 21 Οκτ 2008, 16:12

Κάνε edit το ποστ σου και σβήσε κάποιες λέξεις ...
Οδηγίες προς Νεοεισερχόμενους
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Linux Mint 17.1 Rebecca 3.13.0-37-generic 64bit (el_GR.UTF-8, X-Cinnamon cinnamon)
3 Intel Core i5-2310M CPU @ 2.10GHz ‖ RAM 3866 MiB ‖ Dell Inc. 0D7C51 - Dell Inc. Dell System Vostro 3750
4 Intel 2nd Generation Core Processor Family Integrated Graphics [8086:0116] {i915}
5 wlan0: Intel Centrino Wireless-N 1030 [Rainbow Peak] [8086:008a] (rev 34) ⋮ eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 06)
http://www.greeklug.gr
Άβαταρ μέλους
linuxman
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10378
Εγγραφή: 10 Μάιος 2008, 20:41
Τοποθεσία: Thessaloniki / Macedonia / Greece
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 21 Οκτ 2008, 16:31

ευχαριστω για την προηδοποιηση ηταν απο τον ενθουσιασμο μου συγνωμη :oops:

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

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

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 21 Οκτ 2008, 18:08

Κώδικας: Επιλογή όλων
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;

}





θα προσπαθησω να κανω μετατροπει τον κωδικα απο MASM για windows 16 bit σε linux NASM 32 bit

καλη μου επιτυχια

να ρωτησω κατι αλλο για οποιον ξερει? ποσο διαφερουν οι εντολες απο 16 bit X86 σε 32 bit X86?

ενα τμημα του προγραμματος σε assembly(masm 16 bit windows) που εχω ποσταρει ή καποιο αλλο παραδειγμα πως θα γινοταν, πως θα το μετατρεψω σε nasm 32 bit? γιατι εδω τα πραγματα απ οτι βλεπω γιατι ερχομαι σε πρωτη επαφη με nasm ειναι αρκετα διαφορετικα
Η ζωή είναι κενή χωρίς ιδέες. Δεν υπάρχει μεγαλύτερη χαρά από τον αγώνα στο όνομά τους.

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

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 21 Οκτ 2008, 18:51

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



SECTION .data ;data section.





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 ('$')





SECTION .text ;code section.

global main

main:





PUBLIC _length

EXTRN _asm2pas:PROC





mov eax,@data

mov eds,eax





mov eah,09h

lea edx,message1 ;emfanizei to 1 mnm

int 21h



mov eah,0eah

lea edx,buf ;diabazei to string

int 21h







lea edx,store1 ;push store1

push edx





lea edx,store ;push store

push edx











CALL _asm2pas



mov eax, 4C00h

int 21h



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





_length proc





push ebp

mov ebp,esp





mov edi,[ebp+4]

mov ebx,0







lab:

cmp ecl,0Dh

je telos



mov ecl,store[ebx+1]

inc ebx



jmp short lab



telos:



mov eax,ebx



pop ebp





ret

_length endp













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

τι πρεπει να τροποποιησω στις εντολες ετσι ωστε να ειναι σωστω το προγραμμα μου

ξερω το βασικο οτι οι καταχωρητες γενικου σκοπου ax,bx,cx,dx απο 16 bit για 32 bit ειναι eax,ebx,ecx,edx

πως γινεται να παρω το μισω του eax οπως γινοταν σε 16 bit δηλ. ah ή al για τον ax σε 16bit

για 32 bit πως γινεται αυτο?

γι αυτο μπερδευομαι γιατι δεν ξερω τα βασικα αμα μπορει καποιος να με καθοδηγηση λιγακι

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

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

Re: Nasm x86 32 bit

Δημοσίευσηαπό simosx » 21 Οκτ 2008, 19:52

Κοιτώντας στο
http://en.wikipedia.org/wiki/Yasm
http://www.tortall.net/projects/yasm/
βλέπω ότι υπάρχει το yasm που διατίθεται με την άδεια BSD και είναι συμβατό με NASM.
Είδα ότι έχω το yasm ήδη εγκατεστημένο, είναι πιθανό να μπαίνει με το build-essential. Αν μπορεί να επιβεβαιώσει κάποιος.

Για τη χρήση και παραδείγματα, μπορείς να βρεις οδηγούς στο διαδίκτυο.
Ακόμα, μπορείς να γράψεις προγράμματα σε C και να κάνεις dissassembly με χρήση π.χ. του NASM ή με GCC.

Με gcc κάνεις

Κώδικας: Επιλογή όλων
gcc -S helloworld.c


και παράγει το helloworld.s.
προσωπικό ιστολόγιο ϗ πλανήτης 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

Δημοσίευσηαπό Dimitris » 21 Οκτ 2008, 20:18

To yasm δεν εγκαθίσταται με το build-essential.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Nasm x86 32 bit

Δημοσίευσηαπό thodoris_turtle » 21 Οκτ 2008, 22:49

simosx έγραψε:Κοιτώντας στο
http://en.wikipedia.org/wiki/Yasm
http://www.tortall.net/projects/yasm/
βλέπω ότι υπάρχει το yasm που διατίθεται με την άδεια BSD και είναι συμβατό με NASM.
Είδα ότι έχω το yasm ήδη εγκατεστημένο, είναι πιθανό να μπαίνει με το build-essential. Αν μπορεί να επιβεβαιώσει κάποιος.

Για τη χρήση και παραδείγματα, μπορείς να βρεις οδηγούς στο διαδίκτυο.
Ακόμα, μπορείς να γράψεις προγράμματα σε C και να κάνεις dissassembly με χρήση π.χ. του NASM ή με GCC.

Με gcc κάνεις

Κώδικας: Επιλογή όλων
gcc -S helloworld.c


και παράγει το helloworld.s.


dissassembly δηλ. προγραμμα χαμηλου επιπεδου σε υψηλο επιπεδο οπως C ? αυτο λες?

εγω θελω για NASM οποιαδηποτε πληροφορια και αν βρειτε . συγκεκριμενα πρεπει πρωτα να μαθω τα βασικα για NASM και μετα πρεπει να μαθω πως γινεται η κληση μιας συναρτησης C με παραμετρους απο assembly προγραμμα με χρηση της στοιβας κτλ

MASM ξερω για 16bit σε windows τα βασικα

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

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

Επόμενο

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

cron