【发布时间】:2020-04-14 00:34:33
【问题描述】:
我有这个小程序:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
printf("argv[1] -> %s\n", argv[1]);
}
我在gdb 中使用以下命令进行了分析:
$ gdb -q --args foo hello
Reading symbols from foo...
(gdb) break main
Breakpoint 1 at 0x1148: file foo.c, line 5.
(gdb) run
Starting program: /tmp/foo/foo hello
Breakpoint 1, main (argc=2, argv=0x7fffffffea68) at foo.c:5
5 printf("argv[1] -> %s\n", argv[1]);
(gdb) print argv@2
$1 = {0x7fffffffea68, 0x200000000}
(gdb) print *argv@2
$2 = {0x7fffffffecd8 "/tmp/foo/foo", 0x7fffffffece5 "hello"}
当argv[1] 的内容是
0x200000000 而不是 0x7fffffffece5,它是字符串 "hello" 的实际地址。
【问题讨论】:
标签: c console-application argv