Debug模式下的数组越界访问结果分析
发布日期:2021-06-30 22:08:36
浏览次数:2
分类:技术文章
本文共 2008 字,大约阅读时间需要 6 分钟。
/// @file main.cpp/// @brief Debug模式下的数组越界访问结果分析/// 知识点 : 模式地址对齐的数据填充, 浮点数转内存表示, 有符号位扩展, /// 内存值的打印#includeusing namespace std;/// Debug模式int main() { float f = 10.125f; char szBuf[5] = {'\0'}; int iTmp = 0; // 10.125f 转内存表示 1010.0001 * pow(2, 0) => 0x41210000 /** 内存布局 低地址 &szBuf[0] 00 00 00 00 00 ///< 开始地址为模式地址 &szBuf[5] cc cc cc ///< 由于模式地址对齐填充的内容, debug模式下为0xcc &f 00 00 21 41 高地址 */ /// 有符号数扩展时,是用符号位(最高位)进行填充的 /// -1 = 0xff => 0xffffffff /// -128 = 0x80 => 0xffffff80 ///< iTmp = (int)(char)0x80; /// -52 = 0xcc => 0xffffffcc iTmp = (int)(char)0xcc; /// szBuf[6] 是0xcc => (int)(char)0xcc => 0xffffffcc /// 打印出来是 ffffffcc cout << hex << (int)szBuf[6] << endl; /// 如果szBuf输入了123456789, 算上模式地址对齐填充字节, 覆盖了((char*)&f)[0] /** 内存布局 低地址 &szBuf[0] 31 32 33 34 35 ///< 开始地址为模式地址 &szBuf[5] 36 37 38 ///< 由于模式地址对齐填充的内容, debug模式下为0xcc &f 39 00 21 41 高地址 */ cin >> szBuf; ///< 123456789 /// 将f内容作为一个指针值打印出来 /// f的内存表示为0x41210039 /// 所以按照16进制值打印出来为41210039 cout << hex << (int&)f << endl; cout << hex << *(int*)&f << endl; ///< 这样也是可以的 /** run result ffffffcc 123456789 41220039 41220039 */ return 0;}/**10.125f 转内存表示 1010.0001 * pow(2, 0) => 0x412100001010.0001 * pow(2, 0) = 1.0100001 * pow(2, 3)SEDS = 0 (整数)E = 127 + 3 (pow(2,3)) = 130 = 10000010D = 0100001(1.0100001 * pow(2, 3)) = 0100001 + (补0 23 - 7 = 16) = 0100001, 0000,0000,0000,0000 = 01000010000000000000000SED = 0, 10000010, 01000010000000000000000 = 01000001001000010000000000000000 = 0100,0001,0010,0001,0000,0000,0000,0000 = 4 1 2 1 0 0 0 0 = 0x4121000016进制数字参考表1000 = 8H1001 = 9H1010 = AH1011 = BH1100 = CH1101 = DH1110 = EH1111 = FH130/265 065/232 132/216 016/28 08/24 04/22 02/21 010.125f整数部分 10 => 101010/25 05/22 12/21 010.125f小数部分 0.125f => 00010.125f*20.250 00.250*20.5 00.5*21 0*/
转载地址:https://lostspeed.blog.csdn.net/article/details/50571230 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月18日 10时28分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring Boot整合Servlet使用
2019-04-30
SpringBoot 文件上传
2019-04-30
我居然在Github上找到了一个完整的停车系统(附源码地址)
2019-04-30
大厂经典面试题:Redis为什么这么快?
2019-04-30
精通Spring?请吃我一狗腿!
2019-04-30
培训班老师说可以用这个干掉一大批面试者
2021-07-03
阿里四面,居然栽在一道排序算法上
2021-07-03
【Java编码规范】《阿里巴巴Java开发手册(正式版)》发布!
2021-07-03
如何在二三线城市月薪过万(一)看完这篇后端简历优化,包你面试不断
2021-07-03
阿里P8大神教你十分钟构建好SpringBoot + SSM框架 成功晋升
2021-07-03
Linux运维-搭建高可用Redis缓存
2021-07-03
膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了
2021-07-03
Linux 常用命令
2021-07-03
Android之Handler机制篇
2021-07-03
Android之网络协议篇
2021-07-03
Android之RecyclerView篇
2021-07-03
Android之Retrofit基本用法篇
2021-07-03
Netty与网络协议资料整理
2021-07-03