• STATISTIQUES
  • Il y a eu un total de 0 membres et 2288 visiteurs sur le site dans les dernières 24h pour un total de 2 288 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [EN] Framework Metasploit
    Le Framework Metasploit est un logiciel gratuit, open source de tests de pénétration développ&ea...
    Vulnérabilités
    [EN] Astalavista
    Un site aux ressources incontournable depuis plusieurs années, Astalavista est réellement devenue un cl...
    Hacking
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges
    [FR] Asp-php
    Tutoriaux sur ASP, PHP, ASP.net, XML, SQL, Javascript, HTML, VML - Scripts et ressources pour webmasters - Forums d&#...
    Programmation
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[ASM] Prologue Epilogue ou comment récupérer sa stack
31-08-2014, 20h42 (Modification du message : 31-08-2014, 20h44 par octarin.)
Message : #3
octarin Hors ligne
Apprenti sorcier
*



Messages : 68
Sujets : 11
Points: 47
Inscription : May 2013
RE: [ASM] Prologue Epilogue ou comment récupérer sa stack
J'ai fait l'implémentation assembleur de ton projet de programme qui affiche
l'équivalent hexadécimal d'une chaine de caractère passée en argument.

De plus, une astuce: lorsque tu codes en assembleur, tu peux parfaitement
utiliser des fonctions de la libc, ce qui facilite le débuggage, nottament pour
les fonctions d'entrée-sortie, qui sont fort utiles et qui remplacent les appels
systèmes, peu pratiques à manipuler.

Code ASM :

;
; nasm -f elf32 -o str2hex.o str2hex.nasm
; gcc -m32 -o str2hex str2hex.o
;

section .data

hexasym db "0123456789abcdef"
hexaprefix db "\x"
hexaspace db "20"

section .bss

buf resb 50000

section .text

extern puts
global main

main:
    push ebp
    mov ebp, esp

    mov ebx, 1          ; on initialise le compteur de boucle de manière à ne pas afficher le nom du programmme
    mov esi, buf        ; le pointeur sur la chaine de sortie

    .argloop:

        mov eax, dword [ebp + 0xc]
        mov eax, dword [eax + 4 * ebx]    ; eax contient l'adresse de l'argument courant

        test eax, eax                    
        jz .end                           ; On arrête si argv[ebx] == NULL

        call str2hex                      ; ebx n'est pas modifié, esi pointe sur la fin de la chaine ce qui
                                          ; permet de concaténer les arguments entre eux

        inc ebx
        jmp .argloop

    .end:
    push buf
    call puts                             ; affiche la chaine de sortie

    mov eax, 0
    leave
    ret

; Notre fonction pour afficher les strings en hexadécimal
; eax: adresse de la string
; ebx: si supérieur à un entraine l'ajout d'un séparateur (un espace)
str2hex:
    cmp ebx, 1
    je .carloop

    ; ebx > 1 => on rajoute un espace
    mov edx, dword [hexaprefix]     ;hexaprefix+hexaspace
    mov dword [esi], edx
    add esi, 4

    .carloop:

        xor edx, edx

        mov dl, byte [eax]          ; dl contient le caractère
        test dl, dl
        jz .end

        mov word [esi], '\x'
        add esi, 2                  ; écrit "\x" avant chaque nombre en hexa

        mov ecx, edx

        ; 4 bits de poids fort
        shr dl, 4
        and dl, 0xf
        mov dl, byte [hexasym + edx]
        mov byte [esi], dl
        inc esi

        ; 4 bits de poids faible
        mov dl, cl
        and dl, 0xf
        mov dl, byte [hexasym + edx]
        mov byte [esi], dl
        inc esi

        inc eax                     ; on passe au caractère suivant
        jmp .carloop

    .end:


    mov byte [esi], 0               ; rajout d'un octet nul à la fin du buffer de manière à le rendre affichable par puts

    ret

 
Faire des mathématiques c’est donner le même nom à des choses différentes. -- Henri Poincaré
+1 (3) -1 (0) Répondre


Messages dans ce sujet
RE: [ASM] Prologue Epilogue ou comment récupérer sa stack - par octarin - 31-08-2014, 20h42

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Comment connaitre le language d'un logiciel ou... ThomasYato 1 159 03-08-2019, 08h08
Dernier message: supersnail
  [C] Comment protéger la mémoire ??? Sh4dows 10 727 01-05-2013, 11h13
Dernier message: Sh4dows
  [C / ASM inline] stack nostdlib ark 2 287 11-12-2012, 18h22
Dernier message: Ark

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut