- 论坛徽章:
- 2
|
代码如下:
size_t memlen0 = 0;
memlen0 = 64 * sizeof(STDSPCB);
--------------------------------------------
objdump后
44be3d: 48 c7 45 c0 56 34 12 movq $0x123456,-0x40(%rbp)
44be44: 00
44be45: c7 45 c0 00 c0 00 00 movl $0xc000,-0x40(%rbp)
44be4c: c7 45 c4 00 01 00 00 movl $0x100,-0x3c(%rbp)
正确的计算时,memlen0的值应该为0xc000,但是在64位机器上,编译器在高4字节处添加了0x100,导致这个值变成了0x1000000c000,导致我使用这个值去malloc吃光内存。
printf(“0x%lx, 0x%lx\n”,memlen0, sizeof(STDSPCB));
对于这个打印,正确计算是应该位0x300,但是,64位系统上编译器貌似又在高4字节处添加了0x100,结果打印位0x400000300
编译器为 gcc4.4.7 |
|