ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

05.01.2007, 19:59
|
|
Постоянный
Регистрация: 09.10.2005
Сообщений: 333
Провел на форуме: 1387660
Репутация:
74
|
|
В твоем случае (32 bit) переполнение наверно произойдет после 2147483647 (0x7FFFFFFF)
не , не происходит, ввожу 999999999999999999999999 и всеравно печатает
посоветуйте новую , с сылкой если можно на скачку =)
|
|
|

05.01.2007, 20:35
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
А ты введи 2147483648 =)
|
|
|

05.01.2007, 21:49
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
Tikson не путай "ошибку переполнения" т.е "превышение диапазона значений переменной" с bof.
Почему не возникает ошибка переполнения, при введении числа больше 32767 или меньше -32767 , при испольновании переменной типа int, хотя она должна возникать ?
Она и возникает - выводит неправильное значение. Почему? Пример:
Код:
#include <iostream>
using namespace std;
main(void)
{
unsigned short short_var = 99999999;
cout << short_var << endl;
return 1;
}
Допустим что у тебя 32битный проц -> у unsigned short 2 байта = 16 бит (0 - 65535).
Так вот:
101111101011110000011111111(bin) = 99999999(dec)
Дабы вместить значение в 2хбайтовую переменную, то что отмечено красным отбрасывается - вот и все. Остается:
1110000011111111(bin) = 57599
что и выводится на экран 
|
|
|

05.01.2007, 22:16
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
bof = buffer overflow = переполнение буфера =) И может случиться оно и до тех пор, когда биты вылезут за разрядную сетку, занимаемую переменной в памяти =Р Если тип signed
|
|
|

05.01.2007, 22:27
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
Zadoxlik - примером не порадуешь? А то у меня твой пост в голове не укладывается =)
|
|
|

05.01.2007, 22:29
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
Пример приведен топикстартером =)
|
|
|

05.01.2007, 22:34
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Допустим что у тебя 32битный проц -> у unsigned short 2 байта = 16 бит (0 - 65535).
Так вот:
101111101011110000011111111(bin) = 99999999(dec)
Дабы вместить значение в 2хбайтовую переменную, то что отмечено красным отбрасывается - вот и все. Остается:
1110000011111111(bin) = 57599
что и выводится на экран
это произойдет еще на этапе компиляции, причем умный компилер даже выдаст ворнинг о превышении даипазона значений.
bof = buffer overflow = переполнение буфера =) И может случиться оно и до тех пор, когда биты вылезут за разрядную сетку, занимаемую переменной в памяти =Р Если тип signed
никогда не получится запихнуть, например, в 2-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.
|
|
|

05.01.2007, 22:39
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
никогда не получится запихнуть, например, в 2-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.
естественно =Ь Но ситуация когда в переменную пытаются записать значение б0льшее чем она может вместить тоже называется переполнением. Происходить может на операционном устройстве, тогда будет передано сообщение в виде установленного флага CF или на этапе компиляции, тогда об этом любезно скажет компилятор
Последний раз редактировалось Zadoxlik; 05.01.2007 в 22:42..
|
|
|

05.01.2007, 22:42
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Но ситуация когда в переменную пытаются записать значение б0льшее чем она может вместить тоже называется переполнением. Происходить может на операционном устройстве, тогда будет передавно сообщение в виде флага Cf или на этапе компиляции, тогда об этом любезно скажет компилятор
никто и не спорит 
|
|
|

05.01.2007, 22:49
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
Да а еще может происходить просто при записи данных в память, выделенную под переменную, тогда об этом никто не скажет =) Как в примере автора темы
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|