Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 23:56   #1
pilot34
 
Регистрация: 17.12.2009
Сообщений: 6
Печаль Память не может быть "read"

всем привет.

Скомпилил я переборщик паролей в visual c++2005. При малой длине пароля и при малых алфавитах, все прекрасно работает. Но если ставить большие, то прога, отработав какое-то время, выдает ошибку типа:
инструкция по адресу "0х00412759" обратилась к памяти по адресу "(тут разные значения получаются, например 0х0036с00а)". Память не может быть "read".
Где-то я вылезаю за допустимые границы....
Подскажите пожалуйста что изменить для устранения ошибки или как выяснить в чем проблема.

Если кому не жалко на меня времени, посмотрите пожалуйста.

тут исходный код и исполняемый файл
http://files.mail.ru/APD71A

Отладка в Visual c++ останавливается в 334 строке файла arj2.с
t = text[r] = text[i];

В hiew посмотрел адрес 0х00412759, показывает 8А (mov al, [esi][eax).
как это использовать для устранения ошибки не представляю, с асемблером сложно...
pilot34 вне форума Ответить с цитированием
Старый 18.12.2009, 00:15   #2
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

это включённый DEP. В винде есть такая совершенно бесполезная (как и все остальные) система защиты. Её надо отключить. Открываешь boot.ini и напротив своей винды находишь noexecute=Optin. Меняешь на noexecute=AlwaysOff. Перезагружаешься.
Darth.Vader вне форума Ответить с цитированием
Старый 18.12.2009, 00:21   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Darth.Vader Посмотреть сообщение
это включённый DEP. В винде есть такая совершенно бесполезная (как и все остальные) система защиты. Её надо отключить. Открываешь boot.ini и напротив своей винды находишь noexecute=Optin. Меняешь на noexecute=AlwaysOff. Перезагружаешься.
Еще помоему надо форматирование диска D и поменять холодильник на кухне. После этого вроде решается эта проблема.

По делу:
Ну как глянул на код... Вы уж извените но разгребать его это самоубийство вообщем. Но по строке где массив text и переменный (видимо счетчики) r и i надо либо "бряки" ставить либо простую проверочку на попадание в интервал от 0 до длина_массива_text - 1. Наверное просто вылетаите за границы массива. Если нет, будем дальше думать
BOBAH13 вне форума Ответить с цитированием
Старый 18.12.2009, 00:23   #4
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от pilot34 Посмотреть сообщение
всем привет.

Скомпилил я переборщик паролей в visual c++2005. При малой длине пароля и при малых алфавитах, все прекрасно работает. Но если ставить большие, то прога, отработав какое-то время, выдает ошибку типа:
инструкция по адресу "0х00412759" обратилась к памяти по адресу "(тут разные значения получаются, например 0х0036с00а)". Память не может быть "read".
Где-то я вылезаю за допустимые границы....
Подскажите пожалуйста что изменить для устранения ошибки или как выяснить в чем проблема.

Если кому не жалко на меня времени, посмотрите пожалуйста.

тут исходный код и исполняемый файл
http://files.mail.ru/APD71A

Отладка в Visual c++ останавливается в 334 строке файла arj2.с
t = text[r] = text[i];

В hiew посмотрел адрес 0х00412759, показывает 8А (mov al, [esi][eax).
как это использовать для устранения ошибки не представляю, с асемблером сложно...
Если мои знания асма нормальные, то 0х00412759 эта область памяти вообще защищена, только с 0х1000000 можно к ней обраться в винде, ну а Пользователю вообще дают только после 0х80000000 память....
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 18.12.2009, 00:25   #5
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Цитата:
Еще помоему надо форматирование диска D и поменять холодильник на кухне. После этого вроде решается эта проблема.
Да по любому надо эту гадость отключать - пользы никакой, а программы или игры некоторые вылетают из-за неё.
Darth.Vader вне форума Ответить с цитированием
Старый 18.12.2009, 00:29   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Darth.Vader, что значит надо отключить?) Разве это решение проблемы? Раз срабатывает - значит на то есть причины. В принципе, если сознательно необходимо отключить DEP для какого-то приложения(например при использовании библиотеки ATL старых версий), это можно сделать в настройках линкера(во всяком случае в VS2008, во вкладке Advanced)

Последний раз редактировалось netrino; 18.12.2009 в 00:33.
netrino вне форума Ответить с цитированием
Старый 18.12.2009, 00:34   #7
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

netrino
Ну... у каждого свой стиль настройки системы. Дело в том, что она срабатывает иногда на других программах, особенно сложных, таких, как игры. Тем более, что пользы реальной замечено не было ни разу. Работает - выкидывает - мол, ошибка. Отключаешь - всё работает гладко, и паника, как говорится, зря была.
Darth.Vader вне форума Ответить с цитированием
Старый 21.12.2009, 01:06   #8
pilot34
 
Регистрация: 17.12.2009
Сообщений: 6
По умолчанию

всем большое спасибо помощь в этой проблеме.
ВОВАН13, отдельное спасибо, за направление на истинный путь
pilot34 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - память не может быть read volf Софт 31 20.08.2015 16:39
Динамическая память или кнопка "Отмена" и "Назад" Ilnour1986 Microsoft Office Excel 2 27.10.2009 04:49
Ячейка А1=16, В1=18, в ячейке С1=А1/В1 должна быть запись "0,89:1000" julliz Microsoft Office Excel 6 27.09.2009 19:28
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Память не может быть "read" Alewteena Безопасность, Шифрование 3 27.08.2008 05:16