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 :

Segfault dans une instruction mov dword [esi],ecx


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut Segfault dans une instruction mov dword [esi],ecx
    Bonjour,

    J'ai un plantage de code. Après vérification au debugger, il s'arrête sur cette instruction > mov dword [esi],ecx
    Je ne comprend pas pourquoi.

    Voilà la partie du code concerné:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
     
    proc tcpip_hdr src_addr,\
    	       src_port,\
    	       dst_addr,\
    	       dst_port,\
    	       tcp_flags
     
     
    ;-----------[iphdr offset 1]---------------
     
    	xor	ecx,ecx
     
    	mov	ch,ihl
     
    	mov	cl,version
    	shl	cl,4
    	ror	ecx,12
     
    	mov	cl,tos
    	ror	cx,6
     
    	mov	cl,ip_ecn
    	rol	cx,6
    	ror	ecx,8
     
    	mov	cx,tot_len
    	ror	cx,8
    	rol	ecx,16
     
    	mov	dword [esi],ecx
     
    ;------------------------------------------

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    comment ça il s'arrête? il y as une erreur ou est ce que le processeur freeze?
    si il y as une erreur sur cette instruction ça doit venir d'une autre partie du code parce que la on n'arrive pas a savoir a quoi corrspond esi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Non pas de freeze juste une erreur, celle ci:

    00:00:33 access violation when writing to [00000000]

    Désolé je galère un peu, j'ai repris l'asm après plusieurs années d'arrêt total du coding donc je me questionne sur certaines choses.
    En particulier ce mov dword [esi],ecx, est-ce qu'on a le droit d'écrire ça ? Ca a un sens pour vous ? Ca veut dire quoi exactement ?
    Parce que plus loin dans le programme je continue à empiler sur esi, ça va jusque mov dword [esi+48],ecx
    Vous trouvez ça normal ou bien j'étais défoncé quand j'ai codé ce truc ??

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Sur ton code esi n'est pas initialisé ,du coup tu écris sur l'adresse 0 apparemment ,donc un segfault.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    ok merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Qu'est ce que tu veux dire par "initialiser esi" ?
    Je dois lui adresser une valeur mémoire c'est ça ?

    J'ai fait un mov esi,valeur
    J'ai testé avec plusieurs valeurs différentes mais aucune ne fonctionnent..

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Normal , il faut pas lui donné une valeur au pif , mais une adresse (et une adresse valide , donc variable globale , pile , malloc ou autre ).
    Tu ne peux pas lire/écrire n'importe où en mémoire , l'OS te le bloquera (c'est normalement une des bases qu'on apprend en info mais bon :p )

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Oui je sais qu'on ne peut pas écrire n'importe où en mémoire, mais comment justement déterminer la bonne valeur mémoire, je veux dire, où peut-on écrire en mémoire, comment déterminer cela ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Je suis désolé, j'ai arrêté le coding depuis plusieurs années et j'ai oublié pas mal de choses, du coup j'ai du mal à relire mes codes...

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 065
    Points
    43 065
    Par défaut
    La réponse t'as été donnée, tu dois positionner esi.

    esi doit contenir l'adresse ou tu comptes mettre le contenu de ecx. On ne peut pas savoir pour toi cette adresse, probablement un des paramètres de la fonction, que tu dois donc récupérer sur la pile si mon hypothèse est la bonne.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2008, 13h59
  2. [XSLT]passer une variable js dans une instruction xsl
    Par ounours dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 12/04/2007, 18h39
  3. Type illégal dans une instruction Write/writeln
    Par vuong1 dans le forum Delphi
    Réponses: 4
    Dernier message: 10/01/2007, 06h24
  4. caractère critique dans une instruction sql
    Par Damien10 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2007, 16h54
  5. Problème dans une instruction Recordset
    Par jessy212 dans le forum Access
    Réponses: 2
    Dernier message: 29/08/2006, 10h42

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