Показать сообщение отдельно

  #5  
Старый 14.04.2006, 22:38
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Не надо писать чушь...
-->

Цитата:
переполнение буфера идет....или что-то вроде этого))
Вообще-то, ошибка формата строки.
Это происходит, т.к. при записи в одну область памяти строки, тоесть набора байт используется ф-ия wsprintf?()
Например так можно записать по адресу a строку b:
sprintf( a, b );
или
sprintf( a, "%s", b );
Чтобы записать в a строку "привет от [тут строка b]"
можно сделать так
sprintf( a, "привет от %s", b );

Такой способ безопасен, т.к. если b содержит ключи формата (%s, %x, %d, и т.п.), ничего не произойдет. А если делать так
sprintf( a, b );
то при занесении в b строки "%s", ф-ия прочитает из стека последнее записаное число и выведет строку по этому адресу (пока не будет ноль).
Так можно читать стек (только вниз)

Это частая ошибка, приводит к некорректным значениям ESP (указатель стека).
Очень часто бывает исключение (потом, retn извлечет не тот адрес, который был записан инструкцией call, а след. за ним, т.к. sprintf() сняла 4 байта из стека).

Часто бывает удаленный DoS. В некоторых ftpd.

Тут это смысла не имеет, ведь никаким клиенским скриптом писать в реестр нельзя.

При таких страничках ничего не будет
Код:
<html>
<head><title>%s %d %x</title>
</head>
<body>
<script>document.title="%s";</script>
</body>
</html>

Последний раз редактировалось KEZ; 14.04.2006 в 22:44..