Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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
Windows 如何';子指令是否可能导致无效指针读取?_Windows_Assembly_X86 64_Crash Dumps - Fatal编程技术网

Windows 如何';子指令是否可能导致无效指针读取?

Windows 如何';子指令是否可能导致无效指针读取?,windows,assembly,x86-64,crash-dumps,Windows,Assembly,X86 64,Crash Dumps,我有一个带有以下代码的崩溃转储: mov r11,rsp push rdi sub rsp,0A0h mov qword ptr [rsp+30h],0FFFFFFFFFFFFFFFEh 这是一个函数的序曲。所以,!使用指令sub分析-v表示指针无效\u读取。 AMD指令集指出,若参数不是内存指针,则sub指令不能产生任何异常 另外,READ\u ADDRESS是ffffffffffff,但在寄存器窗口中我可以看到rsp是12b3e0。这是64位操作系统中的32位

我有一个带有以下代码的崩溃转储:

mov     r11,rsp
push    rdi
sub     rsp,0A0h
mov     qword ptr [rsp+30h],0FFFFFFFFFFFFFFFEh
这是一个函数的序曲。所以,
!使用指令
sub
分析-v
表示
指针无效\u读取
。 AMD指令集指出,若参数不是内存指针,则
sub
指令不能产生任何异常

另外,
READ\u ADDRESS
ffffffffffff
,但在寄存器窗口中我可以看到
rsp
12b3e0
。这是64位操作系统中的32位应用程序

我想知道这个错误的可能原因以及如何修复它

UPD:

方法是Microsoft Visual Studio 9.0\VC\include\xtree中的std.\u Tree.insert(const value\u type&\u Val)

编译器是Visual Studio 2008安装的cl.exe,32位,版本15.00.30729.01

命令行:

 /FD /EHsc /MD /GS- /Zc:wchar_t- /Yu"stdafx.h"/W3 /WX /nologo /c /Zi /TP /wd4250 /FI -Zm200 -MP -w34100 -w34189
链接器来自同一源,版本为9.00.30729.01

UPD:对于那些对使用64位调试器调试32位应用程序持怀疑态度的人,我运行了一个32位版本的调试器,得到了相同的结果。所以,我仍然认为它是
sub
指令


UPD:澄清一下:该应用程序是为32位平台构建的。但是处理器和操作系统是64位的。因此,在转储中,我们可以看到具有32位值的64位寄存器,这并不奇怪。

发生了其他事情。在这整组操作码中没有内存读取操作。您只有两次写入(推送和mov)。您的对齐很好,将立即qword值-2放置在堆栈的一个区域中,应该可以

操作系统和操作码的严格程度与此有关。我一直使用64位寄存器。这就像使用32位时,一切都是16位


去别的地方看看。

DEP?或者来自调试器的虚假信息。你确定是
失败了吗?RIP不喜欢在失败的指令之后指向该指令吗…?如何可能您正在调试32位应用程序,并且显示的代码是64位的?最佳做法是使用32位调试器调试32位进程/转储。