ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 05.01.2007, 19:59
Tikson
Постоянный
Регистрация: 09.10.2005
Сообщений: 333
Провел на форуме:
1387660

Репутация: 74
По умолчанию

Цитата:
В твоем случае (32 bit) переполнение наверно произойдет после 2147483647 (0x7FFFFFFF)
не , не происходит, ввожу 999999999999999999999999 и всеравно печатает
Цитата:
У тебя книга старая.
посоветуйте новую , с сылкой если можно на скачку =)
 

  #12  
Старый 05.01.2007, 20:35
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

А ты введи 2147483648 =)
 

  #13  
Старый 05.01.2007, 21:49
Deem3n®
Постоянный
Регистрация: 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
что и выводится на экран
 

  #14  
Старый 05.01.2007, 22:16
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

bof = buffer overflow = переполнение буфера =) И может случиться оно и до тех пор, когда биты вылезут за разрядную сетку, занимаемую переменной в памяти =Р Если тип signed
 

  #15  
Старый 05.01.2007, 22:27
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме:
3730496

Репутация: 519
По умолчанию

Zadoxlik - примером не порадуешь? А то у меня твой пост в голове не укладывается =)
 

  #16  
Старый 05.01.2007, 22:29
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

Пример приведен топикстартером =)
 

  #17  
Старый 05.01.2007, 22:34
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Допустим что у тебя 32битный проц -> у unsigned short 2 байта = 16 бит (0 - 65535).
Так вот:
101111101011110000011111111(bin) = 99999999(dec)
Дабы вместить значение в 2хбайтовую переменную, то что отмечено красным отбрасывается - вот и все. Остается:
1110000011111111(bin) = 57599
что и выводится на экран
это произойдет еще на этапе компиляции, причем умный компилер даже выдаст ворнинг о превышении даипазона значений.

Цитата:
bof = buffer overflow = переполнение буфера =) И может случиться оно и до тех пор, когда биты вылезут за разрядную сетку, занимаемую переменной в памяти =Р Если тип signed
никогда не получится запихнуть, например, в 2-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.
 

  #18  
Старый 05.01.2007, 22:39
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

Цитата:
никогда не получится запихнуть, например, в 2-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.
естественно =Ь Но ситуация когда в переменную пытаются записать значение б0льшее чем она может вместить тоже называется переполнением. Происходить может на операционном устройстве, тогда будет передано сообщение в виде установленного флага CF или на этапе компиляции, тогда об этом любезно скажет компилятор

Последний раз редактировалось Zadoxlik; 05.01.2007 в 22:42..
 

  #19  
Старый 05.01.2007, 22:42
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Но ситуация когда в переменную пытаются записать значение б0льшее чем она может вместить тоже называется переполнением. Происходить может на операционном устройстве, тогда будет передавно сообщение в виде флага Cf или на этапе компиляции, тогда об этом любезно скажет компилятор
никто и не спорит
 

  #20  
Старый 05.01.2007, 22:49
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

Да а еще может происходить просто при записи данных в память, выделенную под переменную, тогда об этом никто не скажет =) Как в примере автора темы
 
Закрытая тема



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Софт для мобильных телефонов под *nix Grrl Сотовый фрикинг 2 02.03.2007 01:47
Bsod экран смерти silveran Чужие Статьи 1 21.12.2005 22:34
ПРОГРАММА "АНТИБАН" Киллер АнтиАдмин 7 09.04.2005 12:00
Допустим программа работает... =))) PEPSICOLA С/С++, C#, Delphi, .NET, Asm 8 15.02.2005 06:21
программа снуффер shmv Болталка 5 12.02.2003 18:09



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ