OVH Cloud OVH Cloud

/proc//maps ?

8 réponses
Avatar
Clément Plantier
Si quelqu'un pourrait me renseigner a propos du fichier /proc/<pid>/maps
ce serai bien...

Alors ma question est :
Que représente le premier champ en début de ligne dans le fichier maps?

Dans le man il est écrit que c'est "l'espace d'adressage du processus". A
priori ceci ne correspond pas à des adresses réelles en mémoire
virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000 (exemple
pris pour la pile (stack) du processus), ce qui est bien au délà du giga
dont je dispose sur ma machine. (1 giga c'est de l'ordre de 0x30000000 il
me semble). Donc à quoi celà correspond ?

Deuxième question : comment peut connaitre l'espace
d'adressage réel d'un processus (pour la pile par exemple)???

Désolé pour tout ceux qui ne comprendront rien à cette question, et
merci à ceux qui auront eu le courage de lire jusqu'au bout...

C'est assez important pour moi, donc si vous avez une semblant d'idée
n'hésitez pas. Merci ;)

--
Clément Plantier


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

8 réponses

Avatar
Yves Rutschle
On Sat, Nov 12, 2005 at 12:25:59AM +0100, Clément Plantier wrote:
Que représente le premier champ en début de ligne dans le fichier maps?

Dans le man il est écrit que c'est "l'espace d'adressage du processus". A
priori ceci ne correspond pas à des adresses réelles en mémoire
virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000 (exemple
pris pour la pile (stack) du processus), ce qui est bien au délà du giga
dont je dispose sur ma machine. (1 giga c'est de l'ordre de 0x30000000 il
me semble). Donc à quoi celà correspond ?



Ben... à des adresses en mémoire _virtuelle_. Chaque
processus a son propre espace d'adressage qui n'a aucun
(mais alors aucun) rapport avec l'adressage physique de
l'ordinateur.

Si tu regarde plus en détail, tu verras que _tous_ les
processus utilisent plus ou moins les même adresses, car ils
marchent tous de la même façon. Donc, chaque
processus a son code en 0x08048000, ses variables ensuite,
et ainsi de suite, et la magie de la vm de Linux replace ça
quelque part dans l'ordinateur (peut-être en RAM, peut-être
sur disque dans le swap), et le processus n'a même pas de
moyen de savoir où se trouvent physiquement ses données.

Deuxième question : comment peut connaitre l'espace
d'adressage réel d'un processus (pour la pile par exemple)???



C'est définit au moment du link dans ld. En adresses
virtuelle, ça par de 0xc0000000 et ça va en descendant, en
général suffisament loin (à vue de nez, environ 7Mo sur mon
système, ça peut peut-être se régler, mais je ne pense pas
que qui que ce soit en ai déjà eu besoin :-)

C'est assez important pour moi, donc si vous avez une semblant d'idée
n'hésitez pas. Merci ;)



J'ai une question en retour: pourquoi est-ce important? A
priori, ça ne devrait intéresser que ceux qui bidouillent le
compilateur, ou la partie vm du noyau.

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Frédéric Bothamy
* Yves Rutschle [2005-11-12 01:17] :
On Sat, Nov 12, 2005 at 12:25:59AM +0100, Clément Plantier wrote:
> Que représente le premier champ en début de ligne dans le fichier maps?
>
> Dans le man il est écrit que c'est "l'espace d'adressage du processus". A
> priori ceci ne correspond pas à des adresses réelles en mémoire
> virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000 (exemple
> pris pour la pile (stack) du processus), ce qui est bien au délà du giga
> dont je dispose sur ma machine. (1 giga c'est de l'ordre de 0x30000000 il
> me semble). Donc à quoi celà correspond ?

Ben... à des adresses en mémoire _virtuelle_. Chaque
processus a son propre espace d'adressage qui n'a aucun
(mais alors aucun) rapport avec l'adressage physique de
l'ordinateur.



Pour compléter ce que dit Yves, dans le schéma classique¹, le noyau
attribue l'espace d'adressage de 0 à 3 Go pour les applications
utilisateur et de 3 à 4 Go pour lui-même (cf. par exemple
http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html). Voir la doc du
noyau sous "Processor type and features/High Memory Support".


Fred

¹ Cela peut dépendre des options CONFIG_NOHIGHMEM, CONFIG_HIGHMEM4G et
CONFIG_HIGHMEM64G.

--
Comment poser les questions de manière intelligente ?
http://www.gnurou.org/documents/smart-questions-fr.html
Comment signaler efficacement un bug ?
http://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Clément Plantier
Le Sat, 12 Nov 2005 01:40:15 +0100, Yves Rutschle a écrit :

On Sat, Nov 12, 2005 at 12:25:59AM +0100, Clément Plantier wrote:
Que représente le premier champ en début de ligne dans le fichier maps?

Dans le man il est écrit que c'est "l'espace d'adressage du processus". A
priori ceci ne correspond pas à des adresses réelles en mémoire
virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000 (exemple
pris pour la pile (stack) du processus), ce qui est bien au délà du giga
dont je dispose sur ma machine. (1 giga c'est de l'ordre de 0x30000000 il
me semble). Donc à quoi celà correspond ?



Ben... à des adresses en mémoire _virtuelle_. Chaque
processus a son propre espace d'adressage qui n'a aucun
(mais alors aucun) rapport avec l'adressage physique de
l'ordinateur.

Si tu regarde plus en détail, tu verras que _tous_ les
processus utilisent plus ou moins les même adresses, car ils
marchent tous de la même façon. Donc, chaque
processus a son code en 0x08048000, ses variables ensuite,
et ainsi de suite, et la magie de la vm de Linux replace ça
quelque part dans l'ordinateur (peut-être en RAM, peut-être
sur disque dans le swap), et le processus n'a même pas de
moyen de savoir où se trouvent physiquement ses données.

Deuxième question : comment peut connaitre l'espace
d'adressage réel d'un processus (pour la pile par exemple)???



C'est définit au moment du link dans ld. En adresses
virtuelle, ça par de 0xc0000000 et ça va en descendant, en
général suffisament loin (à vue de nez, environ 7Mo sur mon
système, ça peut peut-être se régler, mais je ne pense pas
que qui que ce soit en ai déjà eu besoin :-)

C'est assez important pour moi, donc si vous avez une semblant d'idée
n'hésitez pas. Merci ;)



J'ai une question en retour: pourquoi est-ce important? A
priori, ça ne devrait intéresser que ceux qui bidouillent le
compilateur, ou la partie vm du noyau.

Y.



Merci beaucoup à vous 2 pour ces réponses.
Ma deuxième question à mal été comprise, je crois :
En fait j'aimerai savoir, pour un processus donné, l'adresse réelle en
mémoire (ram + swap confondue) des données. Cela me permettrait d'y
acceder au moyen de /dev/mem avec l'offset correspondant.
La mémoire virtuelle telle que vous la définissez ne m'interresse pas,
ce que je veux c'est la véritable adresse en mémoire pour y acceder via
/dev/mem. Je dis que c'est important pour moi car je suis en train de
coder un programme qui me permet de faire des recherches en mémoire, et
des modifs, et j'aimerai pouvoir spécifier le processus dont on veut
modifier les données.

Merci pour vos (éventuelles) futures réponses.

--
Clément Plantier


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jean-Luc Coulon (f5ibh)
--=-l5LiKo7Jzxs0w+M5UT+S
Content-Type: text/plain; charset=iso-8859-15; DelSp=Yes; Format=Flowed
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le 12.11.2005 23:30:53, Clément Plantier a écrit :
Le Sat, 12 Nov 2005 01:40:15 +0100, Yves Rutschle a écrit :

> On Sat, Nov 12, 2005 at 12:25:59AM +0100, Clément Plantier wrote:
>> Que représente le premier champ en début de ligne dans le fichier
maps?
>>
>> Dans le man il est écrit que c'est "l'espace d'adressage du
processus". A
>> priori ceci ne correspond pas à des adresses réelles en mémoire
>> virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000
(exemple
>> pris pour la pile (stack) du processus), ce qui est bien au délà d u
giga
>> dont je dispose sur ma machine. (1 giga c'est de l'ordre de
0x30000000 il
>> me semble). Donc à quoi celà correspond ?
>
> Ben... à des adresses en mémoire _virtuelle_. Chaque
> processus a son propre espace d'adressage qui n'a aucun
> (mais alors aucun) rapport avec l'adressage physique de
> l'ordinateur.
>
> Si tu regarde plus en détail, tu verras que _tous_ les
> processus utilisent plus ou moins les même adresses, car ils
> marchent tous de la même façon. Donc, chaque
> processus a son code en 0x08048000, ses variables ensuite,
> et ainsi de suite, et la magie de la vm de Linux replace ça
> quelque part dans l'ordinateur (peut-être en RAM, peut-être
> sur disque dans le swap), et le processus n'a même pas de
> moyen de savoir où se trouvent physiquement ses données.
>
>> Deuxième question : comment peut connaitre l'espace
>> d'adressage réel d'un processus (pour la pile par exemple)???
>
> C'est définit au moment du link dans ld. En adresses
> virtuelle, ça par de 0xc0000000 et ça va en descendant, en
> général suffisament loin (à vue de nez, environ 7Mo sur mon
> système, ça peut peut-être se régler, mais je ne pense pas
> que qui que ce soit en ai déjà eu besoin :-)
>
>> C'est assez important pour moi, donc si vous avez une semblant
d'idée
>> n'hésitez pas. Merci ;)
>
> J'ai une question en retour: pourquoi est-ce important? A
> priori, ça ne devrait intéresser que ceux qui bidouillent le
> compilateur, ou la partie vm du noyau.
>
> Y.

Merci beaucoup à vous 2 pour ces réponses.
Ma deuxième question à mal été comprise, je crois :
En fait j'aimerai savoir, pour un processus donné, l'adresse réelle e n
mémoire (ram + swap confondue) des données. Cela me permettrait d'y
acceder au moyen de /dev/mem avec l'offset correspondant.
La mémoire virtuelle telle que vous la définissez ne m'interresse pas ,
ce que je veux c'est la véritable adresse en mémoire pour y acceder
via
/dev/mem. Je dis que c'est important pour moi car je suis en train de
coder un programme qui me permet de faire des recherches en mémoire,
et
des modifs, et j'aimerai pouvoir spécifier le processus dont on veut
modifier les données.



Ça, je ne sais aps si on peut l'obtenir facilement. La mémoire
virtuelle est... virtuelle. À un instant donné, elle est remappée en
mémoire ou sur le swap par un mécanisme de la translation dynamique
d'adresse. Mais ça change en permanence. Le processus n'étant jamais
maître de sa position en mémoire réelle, celle-ci étant détermin ée par
le noyau.


Merci pour vos (éventuelles) futures réponses.

--
Clément Plantier



--=-l5LiKo7Jzxs0w+M5UT+S
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)

iD8DBQBDdw1kXit3lz9m7V4RAoNGAKDIwLbnQ3shtV2J7+/BSF9EPRE6LwCgh2HT
CpiIKqnw69CGUhxqZhInsis =y6Hh
-----END PGP SIGNATURE-----

--=-l5LiKo7Jzxs0w+M5UT+S--


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yves Rutschle
On Sun, Nov 13, 2005 at 09:54:42AM +0000, Jean-Luc Coulon
(f5ibh) wrote:
>Ma deuxième question à mal été comprise, je crois : En
>fait j'aimerai savoir, pour un processus donné, l'adresse
>réelle en mémoire (ram + swap confondue) des données.



Toutes les adresses sont 'réelles' :-)

Pour être clair, il vaut mieux parler d'adresse physique et
d'adresse virtuelle.


>Cela me permettrait d'y acceder au moyen de /dev/mem avec
>l'offset correspondant. La mémoire virtuelle telle que
>vous la définissez ne m'interresse pas, ce que je veux
>c'est la véritable adresse en mémoire pour y acceder via
>/dev/mem.



Le problème de /dev/mem, c'est que c'est une image de
mémoire physique. Si des pages sont swappées, on ne le saura
pas facilement.

>Je dis que c'est important pour moi car je suis en train
>de coder un programme qui me permet de faire des
>recherches en mémoire, et des modifs, et j'aimerai
>pouvoir spécifier le processus dont on veut modifier les
>données.
Ça, je ne sais aps si on peut l'obtenir facilement.



Pareil. À mon avis, tu pars sur la mauvaise piste. Je te
conseillerais de regarder comment les debuggeurs marchent:
gdb sait regarder la mémoire d'un autre processus, et ce
sans se soucier d'où elle est physiquement.

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Clément Plantier
Le Sun, 13 Nov 2005 12:50:16 +0100, Yves Rutschle a écrit :

Pareil. À mon avis, tu pars sur la mauvaise piste. Je te
conseillerais de regarder comment les debuggeurs marchent:
gdb sait regarder la mémoire d'un autre processus, et ce
sans se soucier d'où elle est physiquement.

Y.



Le problème c'est que gdb lance lui même un processus fils a debugger,
et donc je pense que c'est plus simple pour lui d'acceder aux données de
ce processus qu'il a créé...

J'ai cherché autour du fichier /dev/<pid>/mem, car il est sensé contenir
la mémoire du process, mais je n'ai pas réussi à extraire la moindre
donnée (même en faisait un lseek sur l'adresse du heap)...

--
Clément Plantier


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yves Rutschle
On Sun, Nov 13, 2005 at 01:29:18PM +0100, Clément Plantier wrote:
Le Sun, 13 Nov 2005 12:50:16 +0100, Yves Rutschle a écrit :
Le problème c'est que gdb lance lui même un processus fils a debugger,
et donc je pense que c'est plus simple pour lui d'acceder aux données de
ce processus qu'il a créé...



Non, gdb peut aussi s'attacher à un PID qui tourne déjà.
C'est exactement ce que tu veux faire. (En fait, tu pourrais
simplement développer autour de gdb par sa ligne de
commande: lancer gdb, récupérer les infos qu'il indique sur
la pile, le tas, etc. Ça a l'avantage d'être portable,
contrairement à la bidouille dans /proc qui peut ne pas
marcher d'une version de Linux à une autre).

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Clément Plantier
Le Sun, 13 Nov 2005 14:30:15 +0100, Yves Rutschle a écrit :

On Sun, Nov 13, 2005 at 01:29:18PM +0100, Clément Plantier wrote:
Le Sun, 13 Nov 2005 12:50:16 +0100, Yves Rutschle a écrit :
Le problème c'est que gdb lance lui même un processus fils a debugger,
et donc je pense que c'est plus simple pour lui d'acceder aux données de
ce processus qu'il a créé...



Non, gdb peut aussi s'attacher à un PID qui tourne déjà.
C'est exactement ce que tu veux faire. (En fait, tu pourrais
simplement développer autour de gdb par sa ligne de
commande: lancer gdb, récupérer les infos qu'il indique sur
la pile, le tas, etc. Ça a l'avantage d'être portable,
contrairement à la bidouille dans /proc qui peut ne pas
marcher d'une version de Linux à une autre).

Y.



Ok, je vais essayer de chercher autour de gdb alors. Merci

--
Clément Plantier


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact