【MSVC】_invalid_parameter和_invoke_watson
最近遇到一个崩溃问题,崩溃在CRT中,最后调用的函数是_invoke_watson。调用关系大概如下:
_invoke_watson
_invalid_parameter
_invalid_parameter_noinfo_noreturn
memcpy_s
虽然看的出来这个是memcpy参数不对导致的崩溃,但是这几个之前没见过的函数成功吸引了我的注意!
这一系列的函数用在windows CRT中处理函数的无效传参。_invalid_parameter的函数原型如下:
extern "C" void __cdecl
_invalid_parameter(
wchar_t const* const expression,
wchar_t const* const function_name,
wchar_t const* const file_name,
unsigned int const line_number,
uintptr_t const reserved);
它会调用处理函数(默认为_invoke_watson),比如结束程序等。_invalid_parameter_noinfo_noreturn和_invoke_watson不会返回调用者函数。
CRT支持设置自定义像_invoke_watson这样的处理函数,_set_invalid_parameter_handler为全局的,_set_thread_local_invalid_parameter_handler只是针对当前线程的:
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
_invalid_parameter_handler _get_invalid_parameter_handler(void);
_invalid_parameter_handler _get_thread_local_invalid_parameter_handler(void);
自定义的处理函数原型如下:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
一个例子:
#include <iostream>
#include <stdlib.h>
using namespace std;
void globalInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved) {
printf("invalid param!\n");
abort();
}
void handleA(int size) {
if(size <= 0) {
_invalid_parameter_noinfo();
}
}
int main(int argc, char* argv[]) {
_invalid_parameter_handler oldHandler;
oldHandler = _set_invalid_parameter_handler(globalInvalidParameterHandler);
handleA(0);
return 0;
}
【MSVC】_invalid_parameter和_invoke_watson的更多相关文章
- ffmpeg+x264 Windows MSVC 静态编译
尝试ubuntu和win下mingw编译版本,但都在Vistual Studio链接时因为依赖 libgcc.a, libmingw.a, libmingwex.a 会与mscrt 有符号冲突. 最后 ...
- glibc与MSVC CRT(转载)
glibc与MSVC CRT 运行库是平台相关的,因为它与操作系统结合得非常紧密.C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数 ...
- MSVC 报错 unable to use inline in declaration get error C2054
晚上用cmake生成了一份lua-cjson的工程文件,msvc6的 编译时报错 后来再stackoverflow找到答案:unable to use inline in declaration ge ...
- C++运行字符编码于MSVC和GCC之间的区别
详细请参考这篇博文 http://blog.csdn.net/dbzhang800/article/details/7540905 运行字符编码就是指,当你源代码写下const char* p = & ...
- MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题
今天遇到一个奇怪的问题. 开发环境: 1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库 2. Visual Studio 2008 问题描述: 在 eclipse cdt 中 ...
- 在msvc中使用Boost.Spirit.X3
Preface “Examples of designs that meet most of the criteria for "goodness" (easy to unders ...
- Qt msvc 乱码如何解决?
#ifdef Q_OS_WIN #pragma execution_character_set("UTF-8") #endif
- 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用
将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.d ...
- MSVC中C++ UTF8中文编码处理探究
字符编码的问题,上大学那会儿就遇到过,一直都是云里雾里,没太搞清楚.最近又遇到了问题,想在C++的控制台上输出Utf-8编码的汉字字节流.尝试了好多次都是乱码,后来花了些时间查查资料,又和同事交流了一 ...
随机推荐
- 使用cert-manager实现Ingress https
什么是https 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报 ...
- Linux系统下rm删除文件后空间没有释放问题解决办法
一.问题描述 今日收到zabbix监控报警,发现生产环境一台服务器的磁盘空间不足,需要进行处理,登录后发现可利用率不足20%,进行相关查看和处理工作:但是操作删除了一些备份文件和日志信息后,查看空间仍 ...
- 腾讯地图 API 调用入门
本文仅为腾讯地图 API 调用入门,如需进阶学习,请在腾讯位置服务网站上进行学习. 登陆网址 https://lbs.qq.com/ 点击右上角的登陆按钮,需要进行注册按照流程进行就好. 完成之后,选 ...
- expdp/impdp使用
Oracle11G数据泵expdp/impdp使用并行与压缩技术备份与恢复 环境准备创建directory对象create or replace directory expdp_dir as '/ex ...
- easyExcel导出excel的简单使用
easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...
- CSS之Background
实验环境 [Windows 10] Chrome 73.0.3683.103(386,64bit) background作用范围 content+padding 参考文献 [1] CSS backgr ...
- sleep、wait、notify、notifyAll的区别
Sleep 和wait 1. sleep是Thread类的静态方法,wait是Object类中定义的方法2. Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.s ...
- css-reset 代码
最常用 * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } *:bef ...
- 15行python代码,帮你理解令牌桶算法
本文转载自: http://www.tuicool.com/articles/aEBNRnU 在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法 ...
- reuters-多分类问题
from keras.datasets import reuters import numpy as np from keras.utils.np_utils import to_categorica ...