Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 异常\访问\向量异常处理程序中的冲突异常_C++_Exception_Assembly_Exception Handling - Fatal编程技术网

C++ 异常\访问\向量异常处理程序中的冲突异常

C++ 异常\访问\向量异常处理程序中的冲突异常,c++,exception,assembly,exception-handling,C++,Exception,Assembly,Exception Handling,我有一个向量异常处理程序,它捕获了一个异常\u访问\u冲突异常 Rip和异常地址是不包含可执行代码的无效地址 我需要找出它试图从哪里执行这个无效地址 我检查了堆栈,结果不可靠。有时会说最后一个返回地址是调用GetCurrentThreadId()的返回,但该API没有调用或跳转操作码,因此它无法尝试从那里执行 一个限制是我不能使用调试器单步执行应用程序 如何查找异常之前执行的先前指令 看来你是在错误地假设。发生访问冲突主要有三个原因。您正在尝试从无效地址读取数据、将数据写入无效地址或从无效地址读

我有一个向量异常处理程序,它捕获了一个异常\u访问\u冲突异常

Rip和异常地址是不包含可执行代码的无效地址

我需要找出它试图从哪里执行这个无效地址

我检查了堆栈,结果不可靠。有时会说最后一个返回地址是调用GetCurrentThreadId()的返回,但该API没有调用或跳转操作码,因此它无法尝试从那里执行

一个限制是我不能使用调试器单步执行应用程序


如何查找异常之前执行的先前指令

看来你是在错误地假设。发生访问冲突主要有三个原因。您正在尝试从无效地址读取数据、将数据写入无效地址或从无效地址读取指令

在前两种情况下,指令指针有效,并指向具有内存操作数的指令。但你的情况显然是第三个,因为IP是无效的

现在的问题是,IP是如何损坏的?几乎可以肯定,这是一个糟糕的跳转或分支指令。但为什么这是第一个有问题的指令?您经常执行不打算解释为指令的字节。然后也很清楚堆栈是如何损坏的。这些字节中的任何一个都可能是PUSH或POP指令


x86没有真正的“执行指令的历史记录”;最接近的是一级缓存内容。这是不现实的。

这是什么目标?x86?看起来像是由于某些自动局部变量的缓冲区溢出导致的堆栈损坏,当控件到达函数末尾时会导致异常。您是否可以运行一些验证程序(如valgrind或Application Validator)来尝试捕获发生的问题,而不是之后的问题?在可疑例程的顶部/底部使用fprintf/fflush如何?当它崩溃时,您可以检查日志文件以查看您所在的位置,然后添加更多日志消息,直到找到它为止。@old_timer its x64您不能使用调试器单步执行应用程序代码吗?如果可以在调试器中抛出应用程序,并且可以很容易地触发异常,则可以在调试器中暂停应用程序,抛出断点,取消暂停,然后逐步执行,直到异常发生。。