首页 > 其他 > 详细

gcc/g++堆栈保护技术

时间:2019-12-04 15:12:17      阅读:94      评论:0      收藏:0      [点我收藏+]

??最近学习内存分布,通过gdb调试发现一些问题,栈空间变量地址应该是从高往低分布的,但是调试发现地址虽然是从高往低分布,但是变量地址的顺序是乱的,请教同事他说可能是gcc/g++默认启用了堆栈保护,关于堆栈保护可以查看这篇文章https://www.ibm.com/developerworks/cn/linux/l-cn-gccstack/

#include <stdio.h>
int main()
{   
    char a = 'a';
    char b = 'b';
    int i = 20;
    
    return 0;
}

默认编译

gcc -g test.c -o test
gdb test
(gdb) p $rsp
$1 = (void *) 0x7fffffffdde0
(gdb) p &a
$2 = 0x7fffffffddda "ab\024"
(gdb) p &b
$3 = 0x7fffffffdddb "b\024"
(gdb) p &i
$4 = (int *) 0x7fffffffdddc

关闭堆栈保护编译

g++ -g -fno-stack-protector test.c -o test
gdb test
(gdb) p $rsp
$1 = (void *) 0x7fffffffdde0
(gdb) p &a
$2 = 0x7fffffffdddf "a FUUUU"
(gdb) p &b
$3 = 0x7fffffffddde "ba FUUUU"
(gdb) p &i
$4 = (int *) 0x7fffffffddd8
(gdb) p $rsp - (void*)&i
$5 = 8

gcc/g++堆栈保护技术

原文:https://www.cnblogs.com/s3320/p/11981576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!