C中的指针变化如此奇怪

Pointer in C changed so weird

我正在使用 BCM 芯片。当我调用它的 sdk 时,当断点命中函数 _bcm_dpp_vlan_port_create 时,我的输入指针 *vlan_port 被更改为一个奇怪的地址。之后我无法收回它的价值。为什么我的指针从0x7f68c89b1b00变成0xfffffffd.

这是过程图:

-

root@localhost:~# cat /proc/6413/maps 00400000-0464c000 r-xp 00000000
   08:06 3932168 /root/os_bin/hsl 0484b000-092de000 rw-p 0424b000 08:06
   3932168 /root/os_bin/hsl 092de000-0b489000 rw-p 00000000 00:00 0
   0cf87000-0cfc9000 rw-p 00000000 00:00 0 [heap] 0cfc9000-11e19000 rw-p
   00000000 00:00 0 [heap] 7f6874000000-7f6874021000 rw-p 00000000 00:00
   0 7f6874021000-7f6878000000 ---p 00000000 00:00 0
   7f687c000000-7f687c021000 rw-p 00000000 00:00 0
   7f687c021000-7f6880000000 ---p 00000000 00:00 0
   7f6880000000-7f6880021000 rw-p 00000000 00:00 0
   7f6880021000-7f6884000000 ---p 00000000 00:00 0
   7f6884000000-7f6884021000 rw-p 00000000 00:00 0
   7f6884021000-7f6888000000 ---p 00000000 00:00 0
   7f6888000000-7f6888021000 rw-p 00000000 00:00 0
   7f6888021000-7f688c000000 ---p 00000000 00:00 0
   7f688c000000-7f688c021000 rw-p 00000000 00:00 0
   7f688c021000-7f6890000000 ---p 00000000 00:00 0
   7f6890000000-7f6890021000 rw-p 00000000 00:00 0
   7f6890021000-7f6894000000 ---p 00000000 00:00 0
   7f68957fb000-7f68957fc000 ---p 00000000 00:00 0
   7f68957fc000-7f6895ffc000 rw-p 00000000 00:00 0
   7f6895ffc000-7f6895ffd000 ---p 00000000 00:00 0
   7f6895ffd000-7f68967fd000 rw-p 00000000 00:00 0
   7f68967fd000-7f68967fe000 ---p 00000000 00:00 0
   7f68967fe000-7f6896ffe000 rw-p 00000000 00:00 0
   7f6896ffe000-7f6896fff000 ---p 00000000 00:00 0
   7f6896fff000-7f68977ff000 rw-p 00000000 00:00 0
   7f68977ff000-7f6897800000 ---p 00000000 00:00 0
   7f6897800000-7f6898000000 rw-p 00000000 00:00 0
   7f6898000000-7f6898021000 rw-p 00000000 00:00 0
   7f6898021000-7f689c000000 ---p 00000000 00:00 0
   7f689c000000-7f689c021000 rw-p 00000000 00:00 0
   7f689c021000-7f68a0000000 ---p 00000000 00:00 0
   7f68a0000000-7f68a0021000 rw-p 00000000 00:00 0
   7f68a0021000-7f68a4000000 ---p 00000000 00:00 0
   7f68a4000000-7f68a4021000 rw-p 00000000 00:00 0
   7f68a4021000-7f68a8000000 ---p 00000000 00:00 0
   7f68a8000000-7f68a8021000 rw-p 00000000 00:00 0
   7f68a8021000-7f68ac000000 ---p 00000000 00:00 0
   7f68ac7f9000-7f68ac7fa000 ---p 00000000 00:00 0
   7f68ac7fa000-7f68acffa000 rw-p 00000000 00:00 0
   7f68acffa000-7f68acffb000 ---p 00000000 00:00 0
   7f68acffb000-7f68ad7fb000 rw-p 00000000 00:00 0
   7f68ad7fb000-7f68ad7fc000 ---p 00000000 00:00 0
   7f68ad7fc000-7f68adffc000 rw-p 00000000 00:00 0
   7f68adffc000-7f68adffd000 ---p 00000000 00:00 0
   7f68adffd000-7f68ae7fd000 rw-p 00000000 00:00 0
   7f68ae7fd000-7f68ae7fe000 ---p 00000000 00:00 0
   7f68ae7fe000-7f68aeffe000 rw-p 00000000 00:00 0
   7f68aeffe000-7f68aefff000 ---p 00000000 00:00 0
   7f68aefff000-7f68af7ff000 rw-p 00000000 00:00 0
   7f68af7ff000-7f68af800000 ---p 00000000 00:00 0
   7f68af800000-7f68b0000000 rw-p 00000000 00:00 0
   7f68b0000000-7f68b0021000 rw-p 00000000 00:00 0
   7f68b0021000-7f68b4000000 ---p 00000000 00:00 0
   7f68b4000000-7f68b4023000 rw-p 00000000 00:00 0
   7f68b4023000-7f68b8000000 ---p 00000000 00:00 0
   7f68b8000000-7f68b8021000 rw-p 00000000 00:00 0
   7f68b8021000-7f68bc000000 ---p 00000000 00:00 0
   7f68bc000000-7f68bc086000 rw-p 00000000 00:00 0
   7f68bc086000-7f68c0000000 ---p 00000000 00:00 0
   7f68c0000000-7f68c0021000 rw-p 00000000 00:00 0
   7f68c0021000-7f68c4000000 ---p 00000000 00:00 0
   7f68c4000000-7f68c4021000 rw-p 00000000 00:00 0
   7f68c4021000-7f68c8000000 ---p 00000000 00:00 0
   7f68c81ba000-7f68c81bb000 ---p 00000000 00:00 0
   7f68c81bb000-7f68c89bb000 rw-p 00000000 00:00 0
   7f68c89bb000-7f68c89bc000 ---p 00000000 00:00 0
   7f68c89bc000-7f68cc000000 rw-p 00000000 00:00 0
   7f68cc000000-7f68cc021000 rw-p 00000000 00:00 0
   7f68cc021000-7f68d0000000 ---p 00000000 00:00 0
   7f68d0000000-7f68d0021000 rw-p 00000000 00:00 0
   7f68d0021000-7f68d4000000 ---p 00000000 00:00 0
   7f68d4422000-7f68d4423000 ---p 00000000 00:00 0
   7f68d4423000-7f68d8000000 rw-p 00000000 00:00 0
   7f68d8000000-7f68d8021000 rw-p 00000000 00:00 0
   7f68d8021000-7f68dc000000 ---p 00000000 00:00 0
   7f68dc000000-7f68dc021000 rw-p 00000000 00:00 0
   7f68dc021000-7f68e0000000 ---p 00000000 00:00 0
   7f68e0000000-7f68e0021000 rw-p 00000000 00:00 0
   7f68e0021000-7f68e4000000 ---p 00000000 00:00 0
   7f68e4735000-7f68ec000000 rw-p 00000000 00:00 0
   7f68ec000000-7f68ec021000 rw-p 00000000 00:00 0
   7f68ec021000-7f68f0000000 ---p 00000000 00:00 0
   7f68f0485000-7f68f0486000 ---p 00000000 00:00 0
   7f68f0486000-7f68f048d000 rw-p 00000000 00:00 0
   7f68f048d000-7f68f048e000 ---p 00000000 00:00 0
   7f68f048e000-7f68f0495000 rw-p 00000000 00:00 0
   7f68f0495000-7f68f04ab000 r-xp 00000000 08:06 917972
   /lib/x86_64-linux-gnu/libgcc_s.so.1 7f68f04ab000-7f68f06aa000 ---p
   00016000 08:06 917972 /lib/x86_64-linux-gnu/libgcc_s.so.1
   7f68f06aa000-7f68f06ab000 rw-p 00015000 08:06 917972
   /lib/x86_64-linux-gnu/libgcc_s.so.1 7f68f06ab000-7f68f06ac000 ---p
   00000000 00:00 0 7f68f06ac000-7f68f06b3000 rw-p 00000000 00:00 0
   7f68f06b3000-7f68f06b4000 ---p 00000000 00:00 0
   7f68f06b4000-7f68f06bb000 rw-p 00000000 00:00 0
   7f68f06bb000-7f68f06bc000 ---p 00000000 00:00 0
   7f68f06bc000-7f68f06c3000 rw-p 00000000 00:00 0
   7f68f06c3000-7f68f06c4000 ---p 00000000 00:00 0
   7f68f06c4000-7f68f06cb000 rw-p 00000000 00:00 0
   7f68f06cb000-7f68f06cc000 ---p 00000000 00:00 0
   7f68f06cc000-7f68f06d3000 rw-p 00000000 00:00 0
   7f68f06d3000-7f68f06d4000 ---p 00000000 00:00 0
   7f68f06d4000-7f68f2925000 rw-p 00000000 00:00 0
   7f68f2925000-7f68f2926000 ---p 00000000 00:00 0
   7f68f2926000-7f68f292d000 rw-p 00000000 00:00 0
   7f68f292d000-7f68f292e000 ---p 00000000 00:00 0
   7f68f292e000-7f68f2935000 rw-p 00000000 00:00 0
   7f68f2935000-7f68f2936000 ---p 00000000 00:00 0
   7f68f2936000-7f68f293d000 rw-p 00000000 00:00 0
   7f68f293d000-7f68f293e000 ---p 00000000 00:00 0
   7f68f293e000-7f68f2945000 rw-p 00000000 00:00 0
   7f68f2945000-7f68f2946000 ---p 00000000 00:00 0
   7f68f2946000-7f68f294d000 rw-p 00000000 00:00 0
   7f68f294d000-7f68f294e000 ---p 00000000 00:00 0
   7f68f294e000-7f68f325e000 rw-p 00000000 00:00 0
   7f68f325e000-7f68f325f000 ---p 00000000 00:00 0
   7f68f325f000-7f68f3266000 rw-p 00000000 00:00 0
   7f68f3266000-7f68f3267000 ---p 00000000 00:00 0
   7f68f3267000-7f68f326e000 rw-p 00000000 00:00 0
   7f68f326e000-7f68f326f000 ---p 00000000 00:00 0
   7f68f326f000-7f68f7003000 rw-p 00000000 00:00 0
   7f68f7003000-7f68f8003000 rw-s 77c00000 00:06 7741
   /dev/linux-kernel-bde 7f68f8003000-7f68f81ee000 rw-p 00000000 00:00 0
   7f68f81ee000-7f68f81f9000 r-xp 00000000 08:06 918016
   /lib/x86_64-linux-gnu/libnss_files-2.19.so 7f68f81f9000-7f68f83f8000
   ---p 0000b000 08:06 918016 /lib/x86_64-linux-gnu/libnss_files-2.19.so 7f68f83f8000-7f68f83f9000 r--p 0000a000 08:06 918016
   /lib/x86_64-linux-gnu/libnss_files-2.19.so 7f68f83f9000-7f68f83fa000
   rw-p 0000b000 08:06 918016 /lib/x86_64-linux-gnu/libnss_files-2.19.so
   7f68f83fa000-7f68f8404000 r-xp 00000000 08:06 918020
   /lib/x86_64-linux-gnu/libnss_nis-2.19.so 7f68f8404000-7f68f8603000
   ---p 0000a000 08:06 918020 /lib/x86_64-linux-gnu/libnss_nis-2.19.so 7f68f8603000-7f68f8604000 r--p 00009000 08:06 918020
   /lib/x86_64-linux-gnu/libnss_nis-2.19.so 7f68f8604000-7f68f8605000
   rw-p 0000a000 08:06 918020 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
   7f68f8605000-7f68f860c000 r-xp 00000000 08:06 918012
   /lib/x86_64-linux-gnu/libnss_compat-2.19.so 7f68f860c000-7f68f880b000
   ---p 00007000 08:06 918012 /lib/x86_64-linux-gnu/libnss_compat-2.19.so 7f68f880b000-7f68f880c000
   r--p 00006000 08:06 918012
   /lib/x86_64-linux-gnu/libnss_compat-2.19.so 7f68f880c000-7f68f880d000
   rw-p 00007000 08:06 918012
   /lib/x86_64-linux-gnu/libnss_compat-2.19.so 7f68f880d000-7f68f8810000
   r-xp 00000000 08:06 917960 /lib/x86_64-linux-gnu/libdl-2.19.so
   7f68f8810000-7f68f8a0f000 ---p 00003000 08:06 917960
   /lib/x86_64-linux-gnu/libdl-2.19.so 7f68f8a0f000-7f68f8a10000 r--p
   00002000 08:06 917960 /lib/x86_64-linux-gnu/libdl-2.19.so
   7f68f8a10000-7f68f8a11000 rw-p 00003000 08:06 917960
   /lib/x86_64-linux-gnu/libdl-2.19.so 7f68f8a11000-7f68f8bb2000 r-xp
   00000000 08:06 917949 /lib/x86_64-linux-gnu/libc-2.19.so
   7f68f8bb2000-7f68f8db2000 ---p 001a1000 08:06 917949
   /lib/x86_64-linux-gnu/libc-2.19.so 7f68f8db2000-7f68f8db6000 r--p
   001a1000 08:06 917949 /lib/x86_64-linux-gnu/libc-2.19.so
   7f68f8db6000-7f68f8db8000 rw-p 001a5000 08:06 917949
   /lib/x86_64-linux-gnu/libc-2.19.so 7f68f8db8000-7f68f8dbc000 rw-p
   00000000 00:00 0 7f68f8dbc000-7f68f8f89000 r-xp 00000000 08:06
   4198411 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
   7f68f8f89000-7f68f9189000 ---p 001cd000 08:06 4198411
   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
   7f68f9189000-7f68f91a6000 r--p 001cd000 08:06 4198411
   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
   7f68f91a6000-7f68f91b6000 rw-p 001ea000 08:06 4198411
   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
   7f68f91b6000-7f68f91b9000 rw-p 00000000 00:00 0
   7f68f91b9000-7f68f91c6000 r-xp 00000000 08:06 918037
   /lib/x86_64-linux-gnu/libpam.so.0.84.2 7f68f91c6000-7f68f93c5000
   ---p 0000d000 08:06 918037 /lib/x86_64-linux-gnu/libpam.so.0.84.2 7f68f93c5000-7f68f93c6000 rw-p 0000c000 08:06 918037
   /lib/x86_64-linux-gnu/libpam.so.0.84.2 7f68f93c6000-7f68f93ce000 r-xp
   00000000 08:06 917957 /lib/x86_64-linux-gnu/libcrypt-2.19.so
   7f68f93ce000-7f68f95cd000 ---p 00008000 08:06 917957
   /lib/x86_64-linux-gnu/libcrypt-2.19.so 7f68f95cd000-7f68f95ce000 r--p
   00007000 08:06 917957 /lib/x86_64-linux-gnu/libcrypt-2.19.so
   7f68f95ce000-7f68f95cf000 rw-p 00008000 08:06 917957
   /lib/x86_64-linux-gnu/libcrypt-2.19.so 7f68f95cf000-7f68f95fd000 rw-p
   00000000 00:00 0 7f68f95fd000-7f68f9623000 r-xp 00000000 08:06 918083
   /lib/x86_64-linux-gnu/libtinfo.so.5.9 7f68f9623000-7f68f9822000 ---p
   00026000 08:06 918083 /lib/x86_64-linux-gnu/libtinfo.so.5.9
   7f68f9822000-7f68f9826000 r--p 00025000 08:06 918083
   /lib/x86_64-linux-gnu/libtinfo.so.5.9 7f68f9826000-7f68f9827000 rw-p
   00029000 08:06 918083 /lib/x86_64-linux-gnu/libtinfo.so.5.9
   7f68f9827000-7f68f984b000 r-xp 00000000 08:06 918001
   /lib/x86_64-linux-gnu/libncurses.so.5.9 7f68f984b000-7f68f9a4a000
   ---p 00024000 08:06 918001 /lib/x86_64-linux-gnu/libncurses.so.5.9 7f68f9a4a000-7f68f9a4b000 r--p 00023000 08:06 918001
   /lib/x86_64-linux-gnu/libncurses.so.5.9 7f68f9a4b000-7f68f9a4c000
   rw-p 00024000 08:06 918001 /lib/x86_64-linux-gnu/libncurses.so.5.9
   7f68f9a4c000-7f68f9b4c000 r-xp 00000000 08:06 917995
   /lib/x86_64-linux-gnu/libm-2.19.so 7f68f9b4c000-7f68f9d4b000 ---p
   00100000 08:06 917995 /lib/x86_64-linux-gnu/libm-2.19.so
   7f68f9d4b000-7f68f9d4c000 r--p 000ff000 08:06 917995
   /lib/x86_64-linux-gnu/libm-2.19.so 7f68f9d4c000-7f68f9d4d000 rw-p
   00100000 08:06 917995 /lib/x86_64-linux-gnu/libm-2.19.so
   7f68f9d4d000-7f68f9d54000 r-xp 00000000 08:06 918068
   /lib/x86_64-linux-gnu/librt-2.19.so 7f68f9d54000-7f68f9f53000 ---p
   00007000 08:06 918068 /lib/x86_64-linux-gnu/librt-2.19.so
   7f68f9f53000-7f68f9f54000 r--p 00006000 08:06 918068
   /lib/x86_64-linux-gnu/librt-2.19.so 7f68f9f54000-7f68f9f55000 rw-p
   00007000 08:06 918068 /lib/x86_64-linux-gnu/librt-2.19.so
   7f68f9f55000-7f68f9f6a000 r-xp 00000000 08:06 918010
   /lib/x86_64-linux-gnu/libnsl-2.19.so 7f68f9f6a000-7f68fa169000 ---p
   00015000 08:06 918010 /lib/x86_64-linux-gnu/libnsl-2.19.so
   7f68fa169000-7f68fa16a000 r--p 00014000 08:06 918010
   /lib/x86_64-linux-gnu/libnsl-2.19.so 7f68fa16a000-7f68fa16b000 rw-p
   00015000 08:06 918010 /lib/x86_64-linux-gnu/libnsl-2.19.so
   7f68fa16b000-7f68fa16d000 rw-p 00000000 00:00 0
   7f68fa16d000-7f68fa185000 r-xp 00000000 08:06 918062
   /lib/x86_64-linux-gnu/libpthread-2.19.so 7f68fa185000-7f68fa384000
   ---p 00018000 08:06 918062 /lib/x86_64-linux-gnu/libpthread-2.19.so 7f68fa384000-7f68fa385000 r--p 00017000 08:06 918062
   /lib/x86_64-linux-gnu/libpthread-2.19.so 7f68fa385000-7f68fa386000
   rw-p 00018000 08:06 918062 /lib/x86_64-linux-gnu/libpthread-2.19.so
   7f68fa386000-7f68fa38a000 rw-p 00000000 00:00 0
   7f68fa38a000-7f68fa3ab000 r-xp 00000000 08:06 917929
   /lib/x86_64-linux-gnu/ld-2.19.so 7f68fa3b2000-7f68fa3b3000
   ---p 00000000 00:00 0 7f68fa3b3000-7f68fa3ba000 rw-p 00000000 00:00 0 7f68fa3ba000-7f68fa3bb000 ---p 00000000 00:00 0
   7f68fa3bb000-7f68fa545000 rw-p 00000000 00:00 0
   7f68fa545000-7f68fa54d000 rw-s 383fff808000 00:06 7169 /dev/mem
   7f68fa54d000-7f68fa58d000 rw-s 383fff000000 00:06 7169 /dev/mem
   7f68fa58d000-7f68fa58e000 ---p 00000000 00:00 0
   7f68fa58e000-7f68fa595000 rw-p 00000000 00:00 0
   7f68fa595000-7f68fa596000 ---p 00000000 00:00 0
   7f68fa596000-7f68fa59d000 rw-p 00000000 00:00 0
   7f68fa59d000-7f68fa5a4000 rw-p 00000000 00:00 0
   7f68fa5a7000-7f68fa5a8000 rw-p 00000000 00:00 0
   7f68fa5a8000-7f68fa5aa000 rw-p 00000000 00:00 0
   7f68fa5aa000-7f68fa5ab000 r--p 00020000 08:06 917929
   /lib/x86_64-linux-gnu/ld-2.19.so 7f68fa5ab000-7f68fa5ac000 rw-p
   00021000 08:06 917929 /lib/x86_64-linux-gnu/ld-2.19.so
   7f68fa5ac000-7f68fa5ad000 rw-p 00000000 00:00 0
   7fff3a822000-7fff3a843000 rw-p 00000000 00:00 0 [stack]
   7fff3a91f000-7fff3a922000 r--p 00000000 00:00 0 [vvar]
   7fff3a922000-7fff3a924000 r-xp 00000000 00:00 0 [vdso]
   ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

root@localhost:~#

这是我在 GDB 上调试的内容:

(gdb) b bcm_petra_vlan_port_create
Breakpoint 1 at 0xbeacc0: file /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c, line 12938.
(gdb) c
Continuing.
[Switching to Thread 0x7f68c89ba700 (LWP 10132)]

Breakpoint 1, bcm_petra_vlan_port_create (unit=0, vlan_port=0x92e49b0 <p_hsl_bridge_master>)
    at /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c:12938
12938   /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c: No such file or directory.
(gdb) watch vlan_port
Watchpoint 2: vlan_port
(gdb) b _bcm_dpp_vlan_port_create
Breakpoint 3 at 0xbe4e60: file /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c, line 15004.
(gdb) c
Continuing.
Watchpoint 2: vlan_port

Old value = (bcm_vlan_port_t *) 0x92e49b0 <p_hsl_bridge_master>
New value = (bcm_vlan_port_t *) 0x7f68c89b1b00
bcm_petra_vlan_port_create (unit=0, vlan_port=0x7f68c89b1b00)
    at /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c:12939
12939   in /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c
(gdb) watch vlan_port
Watchpoint 4: vlan_port
(gdb) c
Continuing.

Breakpoint 3, _bcm_dpp_vlan_port_create (unit=0, vlan_port=0xfffffffd)
    at /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c:15004
15004   in /root/.jenkins/workspace/SiteRouter-100G/Dev-SRT100g-Autobuild-Master-UFI/sdk-all-6.5.16/src/bcm/dpp/vlan.c
(gdb) p vlan_port
 = (bcm_vlan_port_t *) 0xfffffffd
(gdb) p *vlan_port
Cannot access memory at address 0xfffffffd
(gdb) 

这里是功能代码

After that i can't retreive it's value. Why my pointer is changed from 0x7f68c89b1b00 to 0xfffffffd.

由于 this bug in GDB (see also ),很可能你的断点 #3 设置在错误的位置(在函数序言完成之前)。

如果您在 GDB 中执行 next,该值可能会返回到 0x7f68c89b1b00