我在C#app中看到一些访问冲突,它调用c ++ dll(cdecl调用约定)
在堆栈跟踪转储中,我看到一些错误的内存位置:
2aabe80c 00020000 someCdll!somefunction(
短* X_data = 0x00000001,
int * X_sizes = 0x00030002,
短* Y_data = 0x0000002b,
int * Y_sizes = 0x0e7115e8
短* T_data = 0x00000000,
struct someStruct * some_data)+ 0x268
并获得访问冲突异常。
短* X_data = 0x00000001看起来无效。
这个函数是否有可能改变了这一点然后导致了访问冲突,或者做了其他什么改变而且这个函数试图写入但是在实际更改内存之前获取了访问冲突?
或者windbg只是给我伪造数据。
编辑* 这是由非托管代码中的经典缓冲区溢出引起的。一个数组指针被加载到一个寄存器中,然后一个循环负责其余的覆盖我的所有堆栈变量,这使得它看起来像代码处于与崩溃时不同的状态。
谢谢,
杰森
答案 0 :(得分:0)
这是由非托管代码中的经典缓冲区溢出引起的。一个数组指针被加载到一个寄存器中,然后一个循环负责其余的覆盖我的所有堆栈变量,这使得它看起来像代码处于与崩溃时不同的状态。