Возникает ли исключение нарушения прав доступа до или после того, как была нарушена память? - PullRequest
0 голосов
/ 14 марта 2012

Я вижу некоторые нарушения прав доступа в приложении C #, которые вызывают c ++ dll (соглашение о вызовах cdecl)

В дампе трассировки стека я вижу некоторые плохие места в памяти:

2aabe80c 00020000 someCdll! Somefunction (

short * X_data = 0x00000001,

int * X_sizes = 0x00030002,

short * Y_data = 0x0000002b,

int * Y_sizes = 0x0e7115e8

short * T_data = 0x00000000,

struct someStruct * some_data) + 0x268

и получение исключения нарушения прав доступа.

Short * X_data = 0x00000001 выглядит недействительным.

Возможно ли, что эта функция изменила это, а затем вызвала нарушение доступа, или что-то еще изменило, и эта функция пытается записать, но получает нарушение доступа, прежде чем она фактически изменит память?

Или просто я получаю поддельные данные.

Редактировать * Это было вызвано классическим переполнением буфера в неуправляемом коде. Указатель массива был загружен в регистр, а затем цикл позаботился об остальном, перезаписав все мои переменные стека, из-за чего он выглядел так, как будто код находился в другом состоянии, чем при сбое.

Спасибо

Jason

1 Ответ

0 голосов
/ 17 декабря 2014

Это было вызвано классическим переполнением буфера в неуправляемом коде. Указатель массива был загружен в регистр, а затем цикл позаботился об остальном, перезаписав все мои переменные стека, из-за чего он выглядел так, как будто код находился в другом состоянии, чем при сбое.

...