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

Linux Discussion :

Mon compilo ne semble pas "lire" #include <sys/reg.h>


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut Mon compilo ne semble pas "lire" #include <sys/reg.h>
    Bonjour à tous!
    Je voudrais suivre pas à pas l'article de linux magazine n°114 sur PTRACE et j'ai donc recopié l'exemple suivant:
    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
    #include <sys/ptrace.h>
    #include <sys/syscall.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <sys/reg.h>
    #include <sys/unistd.h>
    #include <stdio.h>
     
    int main()
    {
    	pid_t child;
    	int status;
     
    	if((child=fork())==0)
    	{
    		ptrace(PTRACE_TRACEME,0,NULL,NULL);
    		execl("/bin/ls","/bin/ls","/",NULL);
    	}
     
    	for(;;)
    	{
    		wait(&status);
    		if(WIFEXITED(status))break;
    		long orig_eax=ptrace(PTRACE_PEEKUSER,child,4*ORIG_EAX,NULL);
    		printf("Appel systeme numero: %ld\n",orig_eax);
    		ptrace(PTRACE_CONT,child,NULL,NULL);
    	}
     
    	return 0;
    }
    lorsqu'ensuite je tape:
    gcc -o strace strace.c
    voici la réponse du compilateur:
    /media/VGData1/1/Developpement/projets/cpp/strace.c||In function ‘main’
    /media/VGData1/1/Developpement/projets/cpp/strace.c|24|erreur: ‘ORIG_EAX’ undeclared (first use in this function)|
    /media/VGData1/1/Developpement/projets/cpp/strace.c|24|erreur: (Each undeclared identifier is reported only once|
    /media/VGData1/1/Developpement/projets/cpp/strace.c|24|erreur: for each function it appears in.)|
    ||=== Build finished: 3 errors, 0 warnings ===|
    Le fichier reg.h est bien présent sur mes machines (un portable sous open suse 11.0 et une tour avec fedora 10)
    Quelqu'un aurait une idée?

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Ce code compile correctement sous ubuntu 8.10 et centos 5.2. Peux tu tenter de rajouter en première ligne de ton fichier (c'est important) un
    juste pour vérifier.
    Cordialement.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Rien n'y fait...

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    As tu une archi 64 bits?
    As tu essayer d'inclure <sys/user.h>?
    Peut tu nous donner des précisions sur ton système?

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Voici quelques information sur mon systeme:
    grep "model name" /proc/cpuinfo
    model name : Intel(R) Core(TM)2 Duo CPU E4500 @ 2.20GHz
    model name : Intel(R) Core(TM)2 Duo CPU E4500 @ 2.20GHz

    head /etc/issue
    Fedora release 10 (Cambridge)
    Kernel \r on an \m (\l)

    uname -a
    Linux chazam.portable 2.6.27.7-134.fc10.x86_64 #1 SMP Mon Dec 1 22:21:35 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
    J'ai également éssayé d'inclure "sys/user.h" comme tu me l'as dit et j'ai obtenu un message supplémentaire du compilateur:
    /usr/include/sys/user.h|32|erreur: expected specifier-qualifier-list before ‘__uint16_t’|
    J'ai de plus en plus l'impréssion qu'il s'agit d'une erreur très bête de ma part, mais j'ai beau retourner ça dans tous les sens....

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Vérifie l'emplacement du fichier reg.h, est il bien ici : /usr/include/sys/reg.h, le cas échéant, peux tu nous l'afficher, je veux dire nous donner tout le code qu'il y a dedans s'il te plaît.

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Le chemin vers reg.h est bien /usr/include/sys/reg.h.
    Voici son contenu:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    /* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
       This file is part of the GNU C Library.
    
       The GNU C Library is free software; you can redistribute it and/or
       modify it under the terms of the GNU Lesser General Public
       License as published by the Free Software Foundation; either
       version 2.1 of the License, or (at your option) any later version.
    
       The GNU C Library is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       Lesser General Public License for more details.
    
       You should have received a copy of the GNU Lesser General Public
       License along with the GNU C Library; if not, write to the Free
       Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
       02111-1307 USA.  */
    
    #ifndef _SYS_REG_H
    #define _SYS_REG_H	1
    #include <bits/wordsize.h>
    
    
    #if __WORDSIZE == 64 --->Ce ne serait pas pour ça par hasard??
    /* Index into an array of 8 byte longs returned from ptrace for
       location of the users' stored general purpose registers.  */
    
    # define R15	0
    # define R14	1
    # define R13	2
    # define R12	3
    # define RBP	4
    # define RBX	5
    # define R11	6
    # define R10	7
    # define R9	8
    # define R8	9
    # define RAX	10
    # define RCX	11
    # define RDX	12
    # define RSI	13
    # define RDI	14
    # define ORIG_RAX 15
    # define RIP	16
    # define CS	17
    # define EFLAGS	18
    # define RSP	19
    # define SS	20
    # define FS_BASE 21
    # define GS_BASE 22
    # define DS	23
    # define ES	24
    # define FS	25
    # define GS	26
    #else
    
    /* Index into an array of 4 byte integers returned from ptrace for
     * location of the users' stored general purpose registers. */
    
    # define EBX 0
    # define ECX 1
    # define EDX 2
    # define ESI 3
    # define EDI 4
    # define EBP 5
    # define EAX 6
    # define DS 7
    # define ES 8
    # define FS 9
    # define GS 10
    # define ORIG_EAX 11
    # define EIP 12
    # define CS  13
    # define EFL 14
    # define UESP 15
    # define SS   16
    #endif
    
    #endif

  8. #8
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Bingo, remplace ORIG_EAX par ORIG_RAX, je pense que cela devrait solutionner ton problème.
    Cordialement.

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Merci!
    Donc si je comprend bien, Pour l'architecture 64, les registres de mes processeurs ont une denomination et des valeur d'appel système différents?

  10. #10
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Disons plutôt que les conventions d'appels et de retour de fonctions sont différents, rax est employé à la place de eax.

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mon compilo ne reconnait pas le type GLubyte
    Par superC dans le forum OpenGL
    Réponses: 4
    Dernier message: 23/01/2007, 19h39
  2. mon compilo n'accèpte pas unsigned!
    Par moon93 dans le forum C
    Réponses: 24
    Dernier message: 08/08/2006, 10h20
  3. Mon compilo ne reconnait pas les UINT8
    Par baert dans le forum C++
    Réponses: 11
    Dernier message: 08/02/2006, 16h08

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