Asm / desasm

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 :slightly_smiling:

Merci pour l’aide apporter :slightly_smiling:

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 :laughing: )
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 :slightly_smiling:

bon, et le pas à pas ? :laughing:
tu sais au moins ou ça plante, maintenant ?

[quote=“MattOTop”]bon, et le pas à pas ? :laughing:
tu sais au moins ou ça plante, maintenant ?[/quote]
Ben non :blush: 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-smpet c’est passé je vais tester le pas à pas aujourd’hui mais avant lecture du man gdb :slightly_smiling:

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.asmje relance le link

ld -s test.o -o testJe retest l’appli segfault puis je la lance avec gdb et il ne trouve toujours pas de symbole pour debugger :open_mouth: :open_mouth:

[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…
:laughing:
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 :slightly_smiling:

[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 :slightly_smiling:

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 :slightly_smiling: Même si j’ai ce “è” à la fin ca fonctionne reste à optimiser tout ça :slightly_smiling:

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 :slightly_smiling:

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 :slightly_smiling:

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 :slightly_smiling: 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 :slightly_smiling: