assembleur x86 sous openbsd - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 12-06-2013 à 22:16:13
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.
Marsh Posté le 13-06-2013 à 08:52:33
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
Marsh Posté le 13-06-2013 à 09:31:43
; 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
Marsh Posté le 17-06-2013 à 09:38:24
salut,
bha justement si c'est eax 8 avec int 80 qui crée le fichier; equ sys_creat
Code :
|
ou
Code :
|
c'est la même chose.
Marsh Posté le 11-06-2013 à 13:24:46
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à.... soit j'ai oublier une tache intermediaire, soit j'en utilise une de travers...
Merci
---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)