IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BSD Discussion :

[OpenBSD][asm] pour le fun mais j'ai un pb d'écriture ?


Sujet :

BSD

  1. #1
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut [OpenBSD][asm] pour le fun mais j'ai un pb d'écriture ?
    Bonjour,

    pour le fun
    je suis en train de jouer un peu avec de l'assembleur sous BSD.

    J'ai codé un petit hello world perso et un autre petit truc, et je voulais faire un truc du même genre, en écrivant non plus sur le TTY mais dans un fichier....

    et là bien sur .... je crois avoir bien fait coté méthode et syscalls mais sans résultat..
    ça ne génère pas le fichier, j'en deduit que j'ai mal fait quelque chose mais quoi ?

    voilà mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    section .data
            line    db      "This is Francois on First Line.", 0xa, 0
            len     equ     $ - line
            line2   db      "This is Francois on second Line.", 0xa, 0
            len2    equ     $ - line2
     
    section .bss
            bssbuf: resb    len      
            file:   resb    8       
     
    section .text
            global _start
     
    _start:
            nop             ; for gdb debugger
            pop ebx         ; argc
            cmp ebx,2       
            jne error       ; less or more args
     
            pop ebx         ; name of the program (argv[0])
            pop ebx         ; next arg is name of file 
            cmp ebx,0       ; check if ebx is not zero (ok)
            jbe error       ; to exit
     
            mov [file], ebx ; store filename in local variable
     
            ; file creation 
            mov eax,8
            mov ecx,511     ; access rigths
            int 80h
     
            cmp eax,0       ; created  ok =0
            jbe error
     
            ; open file in read-write
            mov eax,5
            mov ebx, [file] ;name of file for sys_open
            mov ecx,1       ; 0_RDWR
            int 80h
     
            cmp eax,0       ; check if opened ?
            jbe error
     
            mov ebx,eax     ; store file descriptor of the new file
          ; write line1 to the file pointer (ebx)
            mov eax,4       ; sys_write
            mov ebx,[file]
            mov edx,len
            mov ecx,line
            int 80h
     
            ; writhe second line to the file
            mov eax,4
            mov edx,len2
            mov ecx,line2
            int 80h
     
            ; sync all writ buffers with files
            mov eax,36      ; sys_sync
            int 80h
     
            ; close file (file descriptor in ebx is no longer valid
            mov eax,6
            int 80h
     
            mov eax,1
            mov ebx,0
            int 80h         ; exit 0
     
    error:
            mov ebx,eax     ; get exit_code
            mov eax,1       ; exit(exit_code)
            int 80h

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Bonjour,

    Je vois que je ne suis pas le seul à qui il faudrait offrir une camisole
    Cordialement.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Blague à part,
    Il ne faudrait pas mettre les différents arguments, dans le bon ordre, sur la pile avant d'appeler le syscall ?
    Cordialement.

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    se serait plus propre et surtout plus lisible d'alimenter les registres dans l'ordre pour chaque sys_call mais sur x86 par exemple ça n'a aucune influence. hélas.

    quand à la pile je ne l'utilise pas dans ce code à l'exception de la pile d'arguments que fait défiler au début du code pour m'assurer que l'utilisateur à bien utiliser l'argument du nom de fichier

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Ok, mes notions d'assembleur sont loin derrière moi, mais j'ai un doute ici dans ton code (je ne dis pas que cela résoudra ton problème):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            mov ebx,eax     ; store file descriptor of the new file
          ; write line1 to the file pointer (ebx)
            mov eax,4       ; sys_write
            mov ebx,[file]
            mov edx,len
            mov ecx,line
            int 80h
    Ici, j'ai l'impression que tu écrase le file descripteur...
    Cordialement.

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    non justement je le recharge en force avec [FILE] pour être sur
    et j'ai trouvé une page avec un exemple sur la même façon de faire l'appel donc je pense que c'est bien..

    sinon c'est pas grave c'était juste pour me remettre un peu en memoire /* sans jeu de mots */ l'assembleur...

Discussions similaires

  1. ASM pour AMD A 64 ? Les topics ?
    Par bigbernie dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 24/03/2009, 20h32
  2. [juste pour le fun] Recensement des rangs spéciaux DVP
    Par guidav dans le forum La taverne du Club : Humour et divers
    Réponses: 2
    Dernier message: 26/07/2007, 09h00
  3. [Developper un driver] pour m'amuser. Mais comment?
    Par joujoukinder dans le forum Windows
    Réponses: 3
    Dernier message: 08/03/2007, 19h44
  4. Programme en langage c et asm pour PowerPC
    Par punkybreizh dans le forum Autres architectures
    Réponses: 4
    Dernier message: 07/04/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo