Дата  Запланированые курсы
24.11 Linux-MP. Модульная программа «Архитектура и администрирование Linux»
24.11 Linux-LE. Основы архитектуры и администрирования Linux
26.11 Поисковая оптимизация (SEO)
26.11 Средства растровой графики. Adobe Photoshop
26.11 Управление проектами (MS Project)
27.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений (Группа II)
27.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений (Группа I)
28.11 CORTEX-M-MP. Введение в технологии разработки систем управления на базе МК с RISC ядром ARM Cortex-M
28.11 CORTEX-M-INTRO. Введение в современную микроконтроллерную технику
03.12 Трёхмерное моделирование. 3ds Max
03.12 Компьютерное проектирование в системе AutoCAD (базовый курс)
03.12 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
07.12 DEV-PY200. Объектно-ориентированное программирование на языке Python
10.12 Основы создания веб-сайтов. Adobe Dreamweaver
10.12 Поисковая оптимизация (SEO) для профессионалов
10.12 Средства векторной графики. Adobe Illustrator
12.12 Инструменты бизнес-анализа Microsoft Excel: PowerPivot, PowerView
12.12 CORTEX-M-RISC. RISC-архитектура ARM Cortex-M в микроконтроллерах
17.12 MOC-20762. Разработка баз данных SQL
17.12 Работа в MS Excel. Расширенные возможности
17.12 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
17.12 Adobe After Effects. Создание анимации и эффектов
09.01 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
14.01 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
14.01 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
16.01 CORTEX-M-STM32F. Семейство МК компании ST Microelectronics STM32Fxxx с вычислительным ядром ARM Cortex M3
19.01 Linux-LF. Расширенное администрирование ОС Linux
04.02 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
13.02 CORTEX-M-RTOS. Разработка управляющих программ для МК систем управления с использованием многозадачных ОС реального времени
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
20.03 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
Открыт набор на осенний семестр в Академию информатики для школьников Открыт набор на осенний семестр на программы второго высшего образования
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

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.m...2.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)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.