2 votes

Pourquoi l'adresse de la fonction est différente avant et après l'exécution du code ?

Le code source est ici

#include <stdio.h>

int gcd(a, b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}

int main(int argc, char **argv) {
  int a = atoi(argv[1]);
  int b = atoi(argv[2]);
  int res = gcd(a, b);
  printf("%d\n", res);
  return 0;
}

et compilé avec gcc -O0 gcd.c -o gcd -g

Avant de lancer gcd, le gcd() L'adresse est 0x1169 . Après l'avoir exécuté, l'adresse de la même fonction devient à 0x555555555169 .

$ gdb -q gcd
Reading symbols from gcd...

(gdb) p gcd
$1 = {int (int, int)} 0x1169 <gcd>

(gdb) run 42 24
Starting program: ~/Workstation/gcd 42 24
6
[Inferior 1 (process 104126) exited normally]

(gdb) p gcd
$2 = {int (int, int)} 0x555555555169 <gcd>

Pourquoi il y a une telle différence entre avant et après l'exécution du code ?

0voto

Thien Points 64

Ceci est dû à Randomisation de l'espace d'adressage . En bref, cela signifie que les modules/libs/exécutables seront à une adresse différente à chaque chargement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X