Non ce n’est pas un SMP
Pour le pas à pas, j’ai quelques difficultés avec gdb j’apprends a m’en servir. Je verrais tout ca demain car il commence a se faire tard
Merci pour l’aide apporter
Non ce n’est pas un SMP
Pour le pas à pas, j’ai quelques difficultés avec gdb j’apprends a m’en servir. Je verrais tout ca demain car il commence a se faire tard
Merci pour l’aide apporter
Ben demain, essayes à tous hasards un SMP, si ton noyau n’est pas trop customisé. Vraiment juste au pif comme ça.
Je crois me souvenir que l’athlon XP est spécifiquement prévu pour le MP, mais c’est juste pour trouver une justification à ton plantage alors que ça passe chez Damsss (remarques que je n’ai pas essayé chez moi )
sur ce bonne nuit, je vais aussi me coucher.
slt all,
ca vient peut eutre aussi des patchs genre (grsec, pax) qui protege la stack ou redéfinissent des adresses (userland) aléatoires, as tu ce genre de patch ?
Je n’y avais pas pensé mais c’est vrai que ca aurais pu venir d’un patch secure mais je n’en ai installé aucun donc ca ne doit pas venir de là non plus.
je test avec une image smp et je redis quoi
bon, et le pas à pas ?
tu sais au moins ou ça plante, maintenant ?
[quote=“MattOTop”]bon, et le pas à pas ?
tu sais au moins ou ça plante, maintenant ?[/quote]
Ben non Je n’ai pas eu le temps de m’en occuper correctement ces derniers jours (quelques papiers pour l’administration à faire) par contre j’ai eu le temps de le tester sur un noyau smp
linux-image-2.6.15-1-k7-smp
et c’est passé je vais tester le pas à pas aujourd’hui mais avant lecture du man gdb
mais non mais non ça sert a rien un kernel smp dediou
Cet exemple est particulièrement farfeulu. Je te conseilles plutot déja de ne PAS commencer par de l’assembleur x86, c’est difficile parceque l’architecture x86 est du CISC (meme si ça se traduit en interne en RISC ensuite), et que donc, tu va jouer avec la pile sans arret, alors que ça n’a aucun intéret.
Si ta un macintosh en powerpc, ammuse toi plutot la dessus, ou sur du mips(el) ça sera bien plus rigolo…
Pour un exemple de hello world pas farfelu:
section .data
helloMsg: db 'Hello world!',10
helloSize: equ $-helloMsg
section .text
global _start
_start:
mov eax,4 ; Appel système "write" (sys_write)
mov ebx,1 ; File descriptor, 1 pour STDOUT (sortie standard)
mov ecx,helloMsg ; Adresse de la chaine a afficher
mov edx,helloSize ; Taille de la chaine
int 80h ; Execution de l'appel système
; Sortie du programme
mov eax,1 ; Appel système "exit"
mov ebx,0 ; Code de retour
int 80h
sorti de wikipedia.
[quote=“ed”]mais non mais non ça sert a rien un kernel smp dediou[/quote] si: à savoir que le problême d’ash tournait autour de ça. C’est évident qu’il n’en a pas besoin, mais c’est interressant de savoir pkoi ca plante en mono, mais pas en SMP, non ?
merci ed des tes conseils.
Ce n’est pas vraiment un hello world farfelu il est utilisé dans un prog pour l’exploitation d’un bufferoverflow et comme je veux tout bien comprendre je me penche dessus.
Je suis aussi d’accord avec Matt il n’est pas normal que ca plante sur un noyau simple et que ca fonctionne sur un SMP.
Sinon le Hello world que tu propose ed se compile et se lance parfaitement sous mon noyau non SMP.
Matt: J’ai essayer de debugger en mode pas à pas mais le probleme c’est qu’il ne trouvais pas les symboles de debuggages. Je me dit pas grave je le recompile avec l’option -g de nasm pour les rajouters comme dit dans nasm -h
Donc je fait
nasm -g -f elf test.asm
je relance le link
ld -s test.o -o test
Je retest l’appli segfault puis je la lance avec gdb et il ne trouve toujours pas de symbole pour debugger
[code]ash@seal:~/document/cours/prog/asm$ nasm -g -f elf test.asm
ash@seal:~/document/cours/prog/asm$ ld -s test.o -o test
ash@seal:~/document/cours/prog/asm$ ./test
Erreur de segmentation
ash@seal:~/document/cours/prog/asm$ gdb test
GNU gdb 6.4-debian
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i486-linux-gnu”…(no debugging symbols found)
Using host libthread_db library “/lib/tls/libthread_db.so.1”.
(gdb) run
Starting program: /home/ash/document/cours/prog/asm/test
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
You can’t do that without a process to debug.
(gdb)
[/code]
oui, bon, j’ai une idée de ce qu’il faut faire, mais de là à savoir le faire…
y a pas qqu’un pour expliquer la base de gdb ? parceque pour moi, c’est un chouilla loin (10 ans au moins que je n’ai pas lancé un débogueur)…
Ben je viens de réussir à faire fonctionner le code asm (celui dans le premier post) je le remet pour les retardataires
[code];pyrofreak.asm
[SECTION .text]
global _start
_start:
jmp short ender
starter:
xor eax, eax ;clean up the registers
xor ebx, ebx
xor edx, edx
xor ecx, ecx
mov al, 4 ;syscall write
mov bl, 1 ;stdout is 1
pop ecx ;get the address of the string from the stack
mov dl, 26 ;length of the string
int 0x80
xor eax, eax
mov al, 1 ;exit the shellcode
xor ebx,ebx
int 0x80
ender:
call starter ;put the address of the string on the stack
db 'hello world '[/code]J'ai vu que l'on pouvais aussi utiliser gcc pour compiler le fichier.o créer par nasm j'ai donc tester mais j'avais une erreur de librairie. Apres quelques recherches je suis tomber sur cet article ([url=http://www.alrj.org/docs/asm/linux-asm.html#chap1]là[/url]) dans lequel j'ai remarquer qu'il compilait avec gcc et les options -nostdlib -lc
J’ai donc tester chez moi
ash@seal:~/document/cours/prog/asm$ nasm -g -f elf test.asm
ash@seal:~/document/cours/prog/asm$ gcc -nostdlib -lc test.o -o testgcc
ash@seal:~/document/cours/prog/asm$ ./testgcc
hello world èash@seal:~/document/cours/prog/asm$
et le résultat fonctionne Même si j’ai ce “è” à la fin ca fonctionne reste à optimiser tout ça
L’argument -nostdlib permet de s’affranchir du code ajouté lors de l’édition des liens. Plus de main, place à _start.
Le -lc est l’habituelle demande de lien avec une bibliothèque externe, nécessaire ici car c’est elle qui contient puts.
ok pour le coup de smp, effectivement, c’est étrange.
Sinon si ce code plante, c’est tout a fais logique hein
la fin pourrie de ta chaine, ça viens du fait qu’il n’y a aucun 0 final pour terminer la “chaine”
Oui tu as raison j’avais remarquer apres avoir poster et ca viens aussi de l’erreur que tu m’avais corriger au début du post au niveau de la longueur de la chaine avec 12 au lieu de 26 ca passe mieux
Sinon il parait bizarre je le conçois mais il sert dans l’exploit d’un bof c’est peut etre pour ça. En tout cas merci pour tes remarques Maintenant ça fonctionne en retirant la librairire stdlib de la compilation mais je n’ai pas encore trouver le réel problème qui empéchait la compilation