Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1622 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  assembleur x86 sous openbsd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

assembleur x86 sous openbsd

n°1339280
goblin_rie​ur
ingé systemes unix
Posté le 11-06-2013 à 13:24:46  profilanswer
 

:hello:  
 
pour le fun je me remets un peu à l'assembleur sous x86,  
j'ai déjà pratiqué ça il y a quelques années, sur m6509, m68k30, sparc et power...
Je me cantonne pour simplifier le tout aux appels standards "system" (via le kernel donc, pour pas m emmerder avec les interruptions hardwares)
curieusement j'ai un problème avec un code pourtant simplifié (écrire un texte dans un fichier)
je n'arrives pas à générer le fichier...
 
 

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


 
la compilation le linkage et le strip se passe bien  
et le gdb ne m'a pas permis de trouver ce qui déconne.
 

nasm -f elf32 remind_2.asm -o remind_2.o && ld -s remind_2.o -o remind_2.bin ; echo $?


 
Mon OpenBSD est configuré bien sur pour supporter le elf32 comme format exécutable.
Mais de toute façon même en format natif le fichier ne se crée pas, alors que les droits le permettent. (d'ailleurs je sort en exit 0 ce qui prouve que le code va au bout).
 
Je n'arrives pas à trouver, le défaut, je fais pourtant bien d'après les docs, la création du fichier, son ouverture en RW, son ecriture buffer, le sync, et la fermeture...
 
Avez vous des idées de qui merdoie dans mon bout de code.... parce que je sèche là....  :pt1cable:  :na: soit j'ai oublier une tache intermediaire, soit j'en utilise une de travers...
 
Merci :??:  
 
 :hello:  


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
mood
Publicité
Posté le 11-06-2013 à 13:24:46  profilanswer
 

n°1339368
grao
The visitor
Posté le 12-06-2013 à 22:16:13  profilanswer
 

Test: tu vires tout ce qu'il y a après la création du fichier et tu vérifies de visu qu'il est bien créée.


---------------
Recherche affiche de GITS Arise 3 et 4, faire offre.
n°1339378
goblin_rie​ur
ingé systemes unix
Posté le 13-06-2013 à 08:52:33  profilanswer
 

C'est totalement inutile puisqu'il y a le controle d'erreur qui me dit qu'il est pas crée et effectivement c'est le cas.
 ;)
en plus tu penses bien que c'est par là que j'ai commencé mes tests :D  


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
n°1339380
grao
The visitor
Posté le 13-06-2013 à 09:31:43  profilanswer
 

; file creation  
        mov eax,8
        mov ecx,511     ; access rigths
        int 80h  
Tu devrais pas faire un appel système pour créer le fichier? Là je vois pas quelle ligne est censé créer le fichier.
 
Ca donnerait un truc comme ça:
mov eax, sys_creat      ; create-file sys call
 mov ecx, 511      ; permission  
 int 80h    


---------------
Recherche affiche de GITS Arise 3 et 4, faire offre.
n°1339615
goblin_rie​ur
ingé systemes unix
Posté le 17-06-2013 à 09:38:24  profilanswer
 

salut,
bha justement si c'est eax 8 avec int 80 qui crée le fichier; equ sys_creat
 :hello:

 
Code :
  1. ; file creation 
  2.         mov eax,8
  3.         mov ecx,511     ; access rigths
  4.         int 80h
  5.         cmp eax,0       ; created  ok =0
  6.         jbe error
 

ou

 
Code :
  1. ; file creation 
  2.         mov eax,sys_creat
  3.         mov ecx,511     ; access rigths
  4.         int 80h
  5.         cmp eax,0       ; created  ok =0
  6.         jbe error


c'est la même chose.


Message édité par goblin_rieur le 17-06-2013 à 09:39:56

---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  assembleur x86 sous openbsd

 

Sujets relatifs
Openbsd 5.2 ou netbsd 6Réseau virtuel L2 de type mesh entre serveurs x86
[Gentoo] Make for x86 failed (glibc)(OpenBSD) impossible de booter sur le cd
Différences entre UNIX solaris 10 SPARC et x86[TOPIC UNIQUE] O2 (SGI) avec openBSD/SGI (Only FB 8 bits ??)
[Résolu] Virtualbox: Hôte en x86_64 mais pas de Guest en 64bits???[Debien lenny] Oracle 10G R2 x86_64
Ubuntu 9.10 x86 (Pc std 32bits) et taille maximale de mémoire 
Plus de sujets relatifs à : assembleur x86 sous openbsd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR