Дата  Запланированые курсы
25.02 Поисковая оптимизация (SEO) для профессионалов
25.02 MOC-20742B. Инфраструктура идентификации на основе Windows Server 2016
25.02 Работа в MS Excel. Базовый уровень
25.02 MOC-20762. Разработка баз данных SQL
25.02 Архитектура современных компьютеров
03.03 Рисунок
04.03 DEV-PY-MP. Модульная программа "Разработчик прикладного программного обеспечения (Язык Python)"
04.03 DEV-C-CP. Комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
04.03 Основы алгоритмизации и программирования (Группа II)
04.03 Основы алгоритмизации и программирования (Группа I)
04.03 DEV-C-CP+. Расширенная комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
04.03 DEV-C10. Процедурное программирование. Языки С/C++
04.03 DEV-PY100. Основы процедурного программирования на языке Python
04.03 DEV-PY-MP+. Расширенная модульная программа "Разработчик прикладного программного обеспечения (язык Python)"
04.03 Разработка пользовательских Web-интерфейсов (JavaScript)
05.03 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
05.03 DEV-J10. Программирование на платформе Java. Введение в язык Java
05.03 DEV-J-CP. Комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
11.03 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
11.03 MOC-20744A. Безопасность инфраструктуры средствами Windows Server 2016
11.03 Основы создания веб-сайтов. Adobe Dreamweaver
11.03 MOC-20764. Администрирование инфраструктуры баз данных SQL
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
14.03 Работа в MS Excel. Расширенные возможности
18.03 Инструменты бизнес-анализа Microsoft Excel: PowerPivot, PowerView
18.03 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
18.03 Разработка баз данных (MS Access)
18.03 MOC-10961B. Автоматизация администрирования с Windows PowerShell
20.03 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
20.03 Автоматизация работы в Excel с использованием VBA
25.03 Информационно-коммуникационные технологии в учебном процессе
25.03 DEV-PY110. Процедурное программирование на языке Python (расширенный курс)
01.04 Трёхмерное моделирование. 3ds Max
01.04 Linux-MP. Модульная программа «Архитектура и администрирование Linux»
01.04 Linux-LE. Основы архитектуры и администрирования Linux
01.04 Средства растровой графики. Adobe Photoshop
01.04 Введение в тестирование программного обеспечения
02.04 DEV-J20. Программирование на платформе Java. Стандартные пакеты
08.04 Linux-LF. Расширенное администрирование ОС Linux
08.04 Средства векторной графики. Adobe Illustrator
08.04 Профессиональная верстка сайтов. HTML5 и CSS3
15.04 Компьютерное проектирование в системе AutoCAD (базовый курс)
16.04 DEV-C20. Объектно-ориентированное программирование. Базовый уровень. Язык С++
17.04 DEV-PY111. Базовые алгоритмы и структуры данных на языке Python
22.04 Adobe Photoshop для профессионалов
22.04 Adobe After Effects. Создание анимации и эффектов
06.05 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
13.05 Компьютерное проектирование в системе AutoCAD (базовый курс)
20.05 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
27.05 DEV-PY200. Объектно-ориентированное программирование на языке Python
03.06 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
03.06 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
17.06 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
20.06 DEV-PYQT. Разработка оконных приложений Python c использованием Qt
02.09 DEV-PYWEB. Разработка WEB приложений на языке Python
02.09 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
02.09 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
30.09 Введение в тестирование программного обеспечения
30.09 Введение в тестирование программного обеспечения
30.09 Введение в тестирование программного обеспечения
Открыт набор на весенний семестр на программы профессиональной переподготовки
Начало занятий 1 марта!
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

C# safe код не всегда safe
int0x25
#1 Оставлено : 10 ноября 2010 г. 18:33:53(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 17.09.2008(UTC)
Сообщений: 90
Баллов: 270
Откуда: Russia St.Petersburg

Было скучно на работе и мы с другом решили поиграться с указателями в c# и проверить насколько же в реальности безопасен managed код.
Вот получился довольно таки забавный пример.
Код:

[StructLayout(LayoutKind.Sequential)]
class A
{
public override string ToString()
{
return "I'am type A";
}
}

[StructLayout(LayoutKind.Sequential)]
class B
{
public override string ToString()
{
return "I'am type B";
}
}

class Foo
{
static void Main()
{
A a = new A();
B b = new B();
GCHandle h = GCHandle.Alloc(a, GCHandleType.Pinned);
GCHandle hb = GCHandle.Alloc(b, GCHandleType.Pinned);
Marshal.WriteInt32((IntPtr)((int)h.AddrOfPinnedObject() - 4), Marshal.ReadInt32((IntPtr)((int)hb.AddrOfPinnedObject() - 4)));
Console.WriteLine(a);
}
}

В итоге выводится "I'am type B" [;)]
Если кратко по коду, сначала происходит фиксация объектов в памяти, чтобы они не сдвинулись при сборке мусора и указатели на них были бы валидны. И потом меняется указатель на тип А на значение указателя на тип B;
Вот так вот без строчки unsafe кода можно изменить поведение объектов.

<i><font color="green">Anyone who has never made a mistake has never tried anything new</font id="green"></i>
<i><font color="green">Anyone who has never made a mistake has never tried anything new</font id="green"></i>
Реклама
Margarita.Lukina
#2 Оставлено : 14 ноября 2010 г. 3:26:08(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 10.02.2006(UTC)
Сообщений: 156
Баллов: 468
Откуда: Russia Spb

<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote">
Вот так вот без строчки unsafe кода можно изменить поведение объектов.
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
с маленьким замечанием:
msdn.mi...w2.aspx
<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote">Marshal - класс: Предоставляет коллекцию методов для <b>выделения неуправляемой памяти, копирования блоков неуправляемой памяти и преобразования управляемых типов в неуправляемые, а также прочих разнообразных методов, используемых при взаимодействии с неуправляемым кодом </b>.<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

Margarita Lukina
Margarita Lukina
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.