调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
今天在编写一系列新增需求代码后,开始调试代码
发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
上个版本数代码明明是没有问题的,怎么就突然出现这个问题了呢?
一般来说这个问题是由于引用了空指针、数组越界,使用了野指针等问题,
然后检查了运行相关代码,并未发现问题。
进入逐步调试:
发现有一个类里面的数据发生读取内存异常,调试器里出现地址大小端紊乱:
有的地址是正常的大端地址:0x000000000034fa48(正常)
然而二级指针地址出现小端地址:0x0034fa4000000000(错误),这个地址是无法读取内存的,已越过计算机个该程序分配的内存上线,而在0x000000000034fa40这个位置读取的内存数据却是正常的。
经过各种寻找,尝试网上各种可能解决问题的方法,还是未解决。
由于上个版本是能够运行,这个版本就出现异常,然后我就对比两个版本差异
发现引用了一个头文件,该头文件的#pragma pack使用错误,
头文件 开头我是这样写的:#pragma pack(1)
头文件 末尾我是这样写的:#pragma pack(pop)
然后发现编译器报的warring 如下:
(很多时候我们都不看 warring, 但是很多时候你忽略的warring往往给你带来大麻烦)
我去查询了下 pragma pack的用法:
pragma pack(1),这种是我自定义我的对齐方式为1,而没有入栈操作(这里的栈是the internal compiler stack)
而pragma pack(pop), 是这样操作的:从internal compiler stack中删除最顶端的record;如果没有指定n,则当前栈顶record即为新的packing alignment数值;
如果指定了n,则n将成为新的packing aligment数值;如果指定了identifier,则internal compiler stack中的record都将被pop直到identifier被找到,然后pop出identitier,
同时设置packing alignment数值为当前栈顶的record;如果指定的identifier并不存在于internal compiler stack,则pop操作被忽略
我这里就是制定了自定义对齐值为1, 当执行pop操作时候,则用我的自定义值(1)作为对齐方式, 而栈中找不到这个数据,则出现出栈比入栈多的warring
但是为什么对齐方式没有使用8,会导致 调试器二级指针出现地址大小端紊乱(实际程序也紊乱了)问题,这里还不知具体原因
调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。的更多相关文章
- 0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
此处为非“%s” 类型数据以“%s”类型打印错误. 需要仔细检查代码中数据类型错误.
- Delphi应用程序的调试(十)调试器选项(在IDE中不要使用异常)
可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局 ...
- 第二章排错的工具:调试器Windbg(下)
感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2 读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1 需要用汇编来排错的常见情况 汇编是 ...
- str*函数和大小端判断
#include <stdio.h> #include <assert.h> size_t mstrlen(const char *s) { assert(s != NULL) ...
- 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求. 内容 查找符号 (.pdb) 文件 查找源文件 查找符号 (.pdb) 文件 说明 在之前的 Vis ...
- GDB 调试器使用手冊
使用GDB: 本文描写叙述GDB,GNU的原代码调试器. (这是4.12版1994年一月.GDB版本号4.16) * 文件夹: * 摘要: GDB的摘要 * 实例: 一个使用实例 * 入门: 进入和退 ...
- 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...
- 学习笔记之--认识Xcode中的重要成员:lldb调试器
之前对lldb调试器了解比较少,平时主要用来打印日志和暂定时用鼠标查看属性数据以及使用p po一些简单的命令语句. 今天看了一些关于lldb的文章,顿时觉得之前对它了解太少了,原来它还有那么多的功能. ...
- 手把手教你写Windows 64位平台调试器
本文网页排版有些差,已上传了doc,可以下载阅读.本文中的所有代码已打包,下载地址在此. ------------------------------------------------------- ...
随机推荐
- Struts2之文件上传与下载
时间:2017-1-11 15:47 --使用commons-fileupload组件上传1.客户端 * method="post" * <input t ...
- Java程序设计学习笔记(六) — 网络编程
时间:2016-5-8 02:03 --网络编程 网络传输实际上就是进行数据传输. 一.传输的步骤: 1.对对方IP地址进行定位. 2.将数据打包发送到 ...
- hdfs中数据迁移
1.hdfs集群间数据迁移 hadoop distcp hdfs://192.128.112.66:8020/user/hive/warehouse/data.db/dwi_xxxx_d /user ...
- SpEL表达式注入漏洞学习和回显poc研究
目录 前言 环境 基础学习和回显实验 语法基础 回显实验 BufferedReader Scanner SpEL漏洞复现 低版本SpringBoot中IllegalStateException CVE ...
- Maven无法导入插件,pom文件报错
最近在使用IDEA导入开源项目bootshiro,更新依赖的时候,发现有些插件无法导入,以致于pom文件一直报找不到该插件的错误 一开始就网上各种百度,无论怎么更换阿里云的镜像都导不进,最后想着试试自 ...
- apt-get 安装程序时报 'E: Unable to locate package xxx' 错误处理办法
提示无法定位包,要执行命令更新: sudo apt-get update
- for循环操作(for...in、forEach)
1.for...in语句用于对数组或者对象的属性进行循环操作,是for循环的一种. 注意:该方法可用于数组或对象. 语法: for(变量 in 对象/数组){} 如: var obj = { nam ...
- Python之requests模块-cookie
cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...
- 三剑客之awk 逐行读取
目录: 一.awk工作原理 二.按行输出文本 三.按字段输出文本 四.通过管道,双引号调用shall命令 五.CPU使用率 六.使用awk 统计 httpd 访问日志中每个客户端IP的出现次数 一.a ...
- pythonGUI-PySide2的使用笔记
用python开发跨平台的图形化界面,主流的有3种选择: Tkinter 基于Tk的Python库,Python官方标准库,稳定.发布程序较小,缺点是控件相对较少. wxPython 基于wxWidg ...