0x0000000000400b80 <+16>: xor %cl,(%rdx)
0x0000000000400b82 <+18>: add %al,(%rax)
0x0000000000400b85 <+21>: add %al,(%rax)
0x0000000000400b87 <+23>: add %bl,0x40(%rdx,%rcx,1)
0x0000000000400b8b <+27>: add %al,(%rax)
0x0000000000400b8d <+29>: add %al,(%rax)
0x0000000000400b8f <+31>: add %cl,0x400a(%rax)
0x0000000000400b95 <+37>: add %al,(%rax)
0x0000000000400b97 <+39>: add %dl,0x6010(%rax)
End of assembler dump.
恭喜你终于找到了类A,不必犹豫,直接x命令查看这个地址内容吧。
(gdb) x /16xw 0x00400b80
0x400b80 <_ZTV1A+16>: 0x00400a30 0x00000000 0x00400a5c 0x00000000
0x400b90 <_ZTV1A+32>: 0x00400a88 0x00000000 0x00601090 0x00000000
0x400ba0 <_ZTI1A+8>: 0x00400ba8 0x00000000 0x00004131 0x3b031b01
0x400bb0: 0x00000060 0x0000000b 0xfffffc24 0x000000ac
见到代码段的内容,毫不犹豫直接disassemble:
(gdb) disassemble 0x00400a30
Dump of assembler code for function A::fun():
(gdb) disassemble 0x00400a5c
Dump of assembler code for function A::funa():
(gdb) disassemble 0x00400a88
Dump of assembler code for function A::funb():
按照地址的排序,顺序放着fun,funa,funb,在代码段中找到了这三个函数。
到这里笔者相信根据以上的信息足够画出类A的内存模型图了。
4. 类A的对象模型图