Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

IsBadReadPtr, IsBadWritePtr - C++

04.12.2012, 09:34. Просмотров 924. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
#include <iostream>
#include <fstream>
int main ()
{
 char d[2][16]={"false", "true"};
 int *p=NULL;
 bool r;
 bool w;
 std::ofstream result;
 result.open("result.txt");
 r=IsBadReadPtr(p, sizeof(int));
 w=IsBadWritePtr(p, sizeof(int));
 std::cout<<d[r]<<", "<<d[w]<<", "<<(void*)p<<"."<<std::endl;
 p=new int;
 r=IsBadReadPtr(p, sizeof(int));
 w=IsBadWritePtr(p, sizeof(int));
 std::cout<<d[r]<<", "<<d[w]<<", "<<(void*)p<<"."<<std::endl;
 delete p;
 r=IsBadReadPtr(p, sizeof(int));
 w=IsBadWritePtr(p, sizeof(int));
 std::cout<<d[r]<<", "<<d[w]<<", "<<(void*)p<<"."<<std::endl;
 return 0;
}
, вложен скрин.
0
Миниатюры
IsBadReadPtr, IsBadWritePtr  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 09:34  [ТС] #2
Почему проверка невалидного указателя даёт false на обе функции?
0
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
04.12.2012, 09:54 #3
Имхо потому, что удаленный указатель (пометка в куче) совсем не означает, что вся страница памяти становится недоступна.Вероятно, IsBadReadPtr и т.п. смотрят атрибуты страницы.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 10:39  [ТС] #4
То есть проверить непосредственно адрес нельзя?

Добавлено через 1 минуту
Что самое смешное, туда действительно прошла запись и оттуда всё прочиталось. Подозреваю системную дыру.
0
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
04.12.2012, 10:58 #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Что самое смешное, туда действительно прошла запись и оттуда всё прочиталось. Подозреваю системную дыру.
Никакой особой дыры тут нет. Память для кучи процесса выделяется блоками кратными размеру страницы. Так что максимум можно повредить кучу своего процесса.
0
04.12.2012, 10:58
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru