Я только что нашел то, что поразило меня. Оглядываясь назад, я чувствую себя наивным, не увидев этого раньше, но в то же время для меня это до сих пор шокирует.
Мы вызываем из C# в собственный (C++) код. В настоящее время для наших тестов мы используем P/Invoke и/или C++/CLI. В обеих технологиях мы обнаружили, что можно передать указатель на управляемую память в собственный код, а в собственном коде выполнить доступ для чтения или записи за пределами границ!
Доступ для чтения или записи не всегда завершает работу приложения, а иногда и вообще не приводит к ошибке. Поэтому я предполагаю, что против этого не существует никаких мер защиты?
Хотя я понимаю, что любой вид защиты памяти может привести к (потенциально большим) потерям времени выполнения, это Я до сих пор поражаюсь тому, что мы, кажется, так легко обходим защиту памяти C#. Наш код C# и собственные привязки никоим образом не помечены как небезопасные, но они определенно небезопасны, не так ли?
Я не пытаюсь критиковать C# здесь. Возможно, это единственный способ работы встроенной интеграции или, по крайней мере, единственный способ с хорошей производительностью (?). Но я все еще слегка шокирован тем, что такого рода «проблемы» не обсуждались ни на одной из страниц, посвященных P/. Invoke и C++/CLI, которые я читал. И мне интересно, почему не весь нативный код неявно небезопасен, по крайней мере, при передаче на него указателей?
И наконец, было бы здорово, если бы существовали какие-нибудь способы чтобы защититься от этого. Признаюсь, я очень наивен, когда дело касается защиты памяти от записи. Я знаю, что ОС защищает от записи в память, которая не принадлежит процессу. Однако здесь мы находимся в одном и том же процессе или нет? Существуют ли способы (особенно в Windows) запретить машинному коду запись в любую управляемую память?
Подробнее здесь: https://stackoverflow.com/questions/792 ... can-we-pro
Может ли собственный код (C++) записывать данные за пределы управляемой памяти (C#) и можно ли от этого защититься? ⇐ C#
Место общения программистов C#
1732699882
Anonymous
Я только что нашел то, что поразило меня. Оглядываясь назад, я чувствую себя наивным, не увидев этого раньше, но в то же время для меня это до сих пор шокирует.
Мы вызываем из C# в собственный (C++) код. В настоящее время для наших тестов мы используем P/Invoke и/или C++/CLI. В обеих технологиях мы обнаружили, что можно передать указатель на управляемую память в собственный код, а в собственном коде выполнить доступ для чтения или записи за пределами границ!
Доступ для чтения или записи не всегда завершает работу приложения, а иногда и вообще не приводит к ошибке. Поэтому я предполагаю, что против этого не существует никаких мер защиты?
Хотя я понимаю, что любой вид защиты памяти может привести к (потенциально большим) потерям времени выполнения, это Я до сих пор поражаюсь тому, что мы, кажется, так легко обходим защиту памяти C#. Наш код C# и собственные привязки никоим образом не помечены как небезопасные, но они определенно небезопасны, не так ли?
Я не пытаюсь критиковать C# здесь. Возможно, это единственный способ работы встроенной интеграции или, по крайней мере, единственный способ с хорошей производительностью (?). Но я все еще слегка шокирован тем, что такого рода «проблемы» не обсуждались ни на одной из страниц, посвященных P/. Invoke и C++/CLI, которые я читал. И мне интересно, почему не весь нативный код неявно небезопасен, по крайней мере, при передаче на него указателей?
И наконец, было бы здорово, если бы существовали какие-нибудь способы чтобы защититься от этого. Признаюсь, я очень наивен, когда дело касается защиты памяти от записи. Я знаю, что ОС защищает от записи в память, которая не принадлежит процессу. Однако здесь мы находимся в одном и том же процессе или нет? Существуют ли способы (особенно в Windows) запретить машинному коду запись в любую управляемую память?
Подробнее здесь: [url]https://stackoverflow.com/questions/79229466/can-native-code-c-write-out-of-bounds-in-managed-memory-c-and-can-we-pro[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия