收藏 char a[5] = "king";这个king会在常量段有备份?
之前看到的 一个帖子 没讨论完,就被结贴了,我还有疑问,现贴出来,希望大神指教
环境:ubuntu 3.2.0-38-generic-pae
工具:gcc
#include <stdio.h>
int main(void)
{
char a[] = "king";
return 0;
}
#include <stdio.h>
int main(void)
{
8048404:55 push %ebp
8048405:89 e5 mov %esp,%ebp
8048407:83 e4 f0 and $0xfffffff0,%esp
804840a:83 ec 10 sub $0x10,%esp
804840d:65 a1 14 00 00 00 mov %gs:0x14,%eax
8048413:89 44 24 0c mov %eax,0xc(%esp)
8048417:31 c0 xor %eax,%eax
char a[] = "king";
8048419:c7 44 24 07 6b 69 6e movl $0x676e696b,0x7(%esp)
8048420:67 // 将"king"直接压入栈,未访问其他区域
8048421:c6 44 24 0b 00 movb $0x0,0xb(%esp)
return 0;
8048426:b8 00 00 00 00 mov $0x0,%eax
}
804842b:8b 54 24 0c mov 0xc(%esp),%edx
804842f:65 33 15 14 00 00 00 xor %gs:0x14,%edx
8048436:74 05 je 804843d <main+0x39>
8048438:e8 e3 fe ff ff call 8048320 <__stack_chk_fail@plt>
804843d:c9 leave
804843e:c3 ret
804843f:90 nop
(gdb) list
1
2#include <stdio.h>
3
4int main(void)
5{
6 char p[] = "king";
7 return 0;
8
9}
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004004c0 <+0>:movl $0x0,-0x4(%rsp)
0x00000000004004c8 <+8>:mov 0x4005a0,%eax
0x00000000004004cf <+15>:mov %eax,-0x9(%rsp)
0x00000000004004d3 <+19>:mov 0x4005a4,%cl
0x00000000004004da <+26>:mov %cl,-0x5(%rsp)
0x00000000004004de <+30>:mov $0x0,%eax
0x00000000004004e3 <+35>:retq
End of assembler dump.
(gdb) b 6
Breakpoint 1 at 0x4004c8: file test.c, line 6.
(gdb) start
Temporary breakpoint 2 at 0x4004c0
Starting program: /home/wangxiao/a.out
Temporary breakpoint 2, 0x00000000004004c0 in main ()
(gdb) x/s 0x4005a0
0x4005a0:"king"
(gdb)