2009-12-05 2 views
1

Я пишу программное обеспечение, которое захватывает пароль с помощью std::cinКак изменить внутренний буфер станд :: CIN

Однако маловероятно, что я пытаюсь избежать возможности того, что пароль получить выгружаться на диск из памяти поэтому я хочу изменить буфер std::cin, чтобы перезаписать пароль, как только я покончу с этим.

прямо сейчас у меня есть это:

std::cin.clear(); 
std::stringstream ss; 
ss << "0000000000000000000000000000000000000000000000"; 
std::cin.rdbuf(ss.rdbuf()); 
std::cin.clear(); 

, но я уверен, что это плохо, так как он не принимает во внимание текущий размер буфера КИН. Как правильно переписать содержимое буфера?

благодарит за любую помощь!

ответ

1

Вы можете использовать gptr() и egptr(), чтобы получить начало и конец буфера.

Редактировать: Как указал Чарльз Бейли, они защищены. Мое предположение заключается в том, что если вы хотите, чтобы буфер потока очищал его содержимое в указанное время, вы бы использовали один из своих собственных, который происходит из одного из стандартных классов буфера потока, но предоставляет члену clear() (или тому подобное имя, которое вы найдете удобным). Изменение содержимого буфера без менеджера буфера, зная об этом, будет, как правило, довольно плохим ...

+0

'gptr()' и 'egptr()' защищены, поэтому, если вы не пишете класс streambuf, который использует std :: cin, изначально это не поможет, если я не понимаю ваш ответ? –

2

Даже если вы набрали буфер сразу, все же возможно, что пароль записывается на диск. Буфер системы i/o может быть выгружен на диск, как и рабочая память, в которой находится std :: cin. Я использовал для разработки криминалистического программного обеспечения, которое вынюхивало именно эти условия.

+0

но не перезаписывает буфер, переписывая одну и ту же область памяти? – Jorge

+0

Невозможно ли явить ядру, чтобы сделать определенную титульную страницу не неразборчивой для пейджинга на диске? –

+0

@Jorge: дело в том, что даже если пароль находится в памяти всего за один цикл команд, есть вероятность, что он будет выгружен на диск. @Vainstah: это возможно с копией программы буфера потока и, возможно, даже с копией библиотеки времени выполнения, но как насчет буферов ввода-вывода системы? Невозможно узнать, где они. – wallyk

Смежные вопросы