Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    _DEN_
    как возможность переполнения буфера
     
  2. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Nouzui

    Напомню, что в моем случае first - LPWSTR. И такой прием кончается следующим:

    error C2664: 'wcscpy' : cannot convert parameter 1 from 'LPCWSTR' to 'wchar_t *'
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    IceFire
    wcscpy((wchar_t*)first, buffer);
     
  4. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Great

    гы, спасибо ) я че-то затупил ))
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IceFire
    почему у тебя first типа LPCWSTR, а не просто LPWSTR?
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    Это же текст. Или ты туда Войну и мир засунуть решил? :)
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    _DEN_
    а кто знает... ))
    раньше тоже смеялись, пока не начали эксплуатировать уязвимости в библиотеках обработки bmp %(
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Nouzui

    А все от того что кое-кто не умеет пользоваться контейнерами. Проблема не в том что это переполнене буфера, а в том, что некоторые люди не умеют программировать.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    _DEN_
    ну так на случай таких криворуких кодеров и есть wcsncpy, чтобы вдруг не слетал стек, если кодер случайно выделил в стеке буфер для строки
     
  10. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    я не умею пользоваться контейнерами )) что это вообще такое?
    а по поводу умения программировать.. все иногда ошибаются. Поэтому лучше вырабатывать такие привычки проектирования и кодинга, чтобы последствия от этих ошибок сокращались до минимума
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    вот именно... тем более иногда возникает необходимость использовать код, написанный другими, где тоже могут быть ошибки. конечно, нужно устранять причину, но и контролировать следствие тоже не помешает :)
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Nouzui

    http://www.yandex.ru/yandsearch?rpt=rad&text=STL+%EA%EE%ED%F2%E5%E9%ED%E5%F0%FB

    Значит ты программируешь на C, а не на C++.

    Great

    В больших проектах ничего кроме усыпления бдительности не дает. Всеравно что пить аспирин при туберкулезе.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    зато от переполнения иногда спасает. хотя никто не спорит, что писать надо правильно
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ахха. Не так давно товарищу предложили представить составляющую цвета как объект (три объекта на пиксел). И описать ими картинку. Он долго ждал, пока завершится её создание…
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    IceStudent

    Ну так это опять от неправильного понимания ООП)) Класс - это функциональная единица, а не концептуальный тип. Делать свой класс на каждый цвет - вкорне неверное понимание ООП. Да и пиксель это простой аггрегат, а не функциональная единица, и делание его классом так же попахивает ламеризмом.

    Вот такое представление будет работать практически так же как и прямая работа с битмапом:
    Код (Text):
    1. struct Pixel
    2. {
    3.     typedef unsigned char Component;
    4.  
    5.     Component m_Red;
    6.     Component m_Green;
    7.     Component m_Blue;
    8. };
    9.  
    10. typedef std::vector<Pixel> Bitmap;
    Надо пользоваться нормальными компиляторами и не забывать включать Release :derisive:
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ну лан, а что это дает?

    зы: насчет C ты, пожалуй, прав
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Я незнаю как ответить на этот вопрос в одно предложение :) Это всеравно что спросить чем ООП лучше процедур. Это дает возможность работать в стиле С++ а не в стиле С. Использовать идиомы ООП, структуируя данные таким образом каким это необходимо и применять лаконичные алгоритмы для их обработки. Такой ответ устроит? :)
     
  18. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    я имел в виду, как это связано с переполнением буфера:
     
  19. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Nouzui

    Память в контейнерах выделяется не на стеке. Поэтому не более чем Access Violation или Bad Alloc.
     
  20. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    гм.. строковые буферы тоже можно выделять не в стеке, только панацея ли это? Про стек тоже раньше думали - ну перетрет адрес возврата, ну вернется управление не туда, ну и закончится это ексепшеном.. а мысль о том, что это может использоваться для передачи управления коду, размещенному в том же самом стековом буфере, вроде, выглядела достаточно смешно - откуда атакующий может знать текущее значение ESP, чтобы определить, каким именно значением нужно перетереть адрес возврата, ведь текущая позиция в стеке зависит от слишком большого числа факторов, включая версию оси, версию продукта, момент атаки итд..
    и ниче, эксплоиты пошли волной. Думаешь, если память переезжается не в стеке, то этим невозможно будет воспользоваться?