【发布时间】:2021-04-29 03:32:40
【问题描述】:
源代码在这里
#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;
}
并用gcc -O0 gcd.c -o gcd -g编译
在我运行 gcd 之前,gcd() 地址是0x1169。
我运行之后,同一个函数的地址变成了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>
为什么在运行代码之前和之后会有这样的差异?
【问题讨论】:
-
@MarkPlotnick 我认为它并没有真正回答这个问题,为什么地址在执行后重新定位?
-
@MarkPlotnick 非常感谢,这正是我想知道的! :)
标签: c gdb function-address