小编Bro*_*ace的帖子

为什么register_tm_clones和deregister_tm_clones引用了.bss部分之后的地址?这个内存分配在哪里?

register_tm_clones并且deregister_tm_clones正在引用我的RW部分末尾的内存地址.这个记忆是如何被追踪的?

示例:在下面的示例中deregister_tm_clones引用了内存地址0x601077,但是我们分配的最后一个RW部分,.bss0x601069并且具有大小开始0x7,我们得到了0x601070.所以引用显然是过去为该.bss部分分配的,应该在我们的堆空间中,但谁在管理它.

objdump -d main
...
0000000000400540 <deregister_tm_clones>:
  400540:       b8 77 10 60 00          mov    $0x601077,%eax
  400545:       55                      push   %rbp
  400546:       48 2d 70 10 60 00       sub    $0x601070,%rax
  40054c:       48 83 f8 0e             cmp    $0xe,%rax
...

readelf -S main
...
[25] .data             PROGBITS         0000000000601040  00001040
   0000000000000029  0000000000000000  WA       0     0     16
[26] .bss              NOBITS           0000000000601069  00001069
   0000000000000007  0000000000000000  WA       0     0 …
Run Code Online (Sandbox Code Playgroud)

c memory-management objdump readelf

5
推荐指数
1
解决办法
4739
查看次数

标签 统计

c ×1

memory-management ×1

objdump ×1

readelf ×1