IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Access violation during writing


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut Access violation during writing
    Bonjour,

    J'essayes de coder un shellcode en assembleur lancant la calculatrice en utilisant l'appel winexec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    section text
     
    global _main
    _main:
    	xor 	ecx, ecx
    	xor	ebx, ebx
    	xor	eax, eax
    jmp getcalc
    	ret:
    	pop	ebx	
    	mov	[ebx + 0x1C], cl
     
     
    	mov 	eax, 0x7C862AED		; WinExec address
    	push	ebx			; file to open
    	call	eax
    	ret 
     
    getcalc:
    call ret
    calc	db	'c:\windows\system32\calc.exeA'
    En déboggant sous ollydbg je recois une erreur de type :

    Access violation when writing to [00402037]
    lors du remplacement du caractère A (qui est bien situé à l'adresse 0x00402037) dans ma chaine (mov [ebx + 0x1C], cl).

    Pour information je suis sous Windows XP SP3 et je compile mon programme de la facon suivante:

    nasm -f win32 -o prog.o prog.asm
    gcc -o prog.exe prog.o
    Est ce que quelqu'un peut m'expliquer pourquoi cette instruction provoque un access violation et comment éviter que cela se produise ?

    En vous remerciant par avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    • Ton texte est considéré ici comme faisant partie du code et appartient donc au même segment, qui est en lecture seule ;
    • Appeler « ret » une étiquette est une mauvaise idée. On la confond avec l'instruction homonyme ;
    • Ton « call ret » semble fonctionner et appelle bien la procédure fautive mais lorsque celle-ci va se finir, tu va atterrir dans le vide : ta chaîne de caractères suit immédiatement ton instruction CALL et va être considérée comme du code par le micro-processeur, qui ne manquera donc pas de planter.

Discussions similaires

  1. [OCILIB] OCI_LobRead erreur Access violation writing location
    Par capic dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 05/12/2011, 08h52
  2. Réponses: 6
    Dernier message: 15/05/2009, 14h07
  3. Access violation writing location 0x00000010.
    Par dhoorens dans le forum C++
    Réponses: 6
    Dernier message: 29/12/2006, 11h23
  4. [DELPHI][PROECEDURES STOCKES] Access violation
    Par All Jinx dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/05/2004, 15h57
  5. Réponses: 3
    Dernier message: 22/05/2002, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo