Может ли собственный код (C++) записывать данные за пределы управляемой памяти (C#) и можно ли от этого защититься?C#

Место общения программистов C#
Ответить
Anonymous
 Может ли собственный код (C++) записывать данные за пределы управляемой памяти (C#) и можно ли от этого защититься?

Сообщение Anonymous »

Я только что нашел то, что поразило меня. Оглядываясь назад, я чувствую себя наивным, не увидев этого раньше, но в то же время для меня это до сих пор шокирует.
Мы вызываем из C# в собственный (C++) код. В настоящее время для наших тестов мы используем P/Invoke и/или C++/CLI. В обеих технологиях мы обнаружили, что можно передать указатель на управляемую память в собственный код, а в собственном коде выполнить доступ для чтения или записи за пределами границ!
Доступ для чтения или записи не всегда завершает работу приложения, а иногда и вообще не приводит к ошибке. Поэтому я предполагаю, что против этого не существует никаких мер защиты?
Хотя я понимаю, что любой вид защиты памяти может привести к (потенциально большим) потерям времени выполнения, это Я до сих пор поражаюсь тому, что мы, кажется, так легко обходим защиту памяти C#. Наш код C# и собственные привязки никоим образом не помечены как небезопасные, но они определенно небезопасны, не так ли?
Я не пытаюсь критиковать C# здесь. Возможно, это единственный способ работы встроенной интеграции или, по крайней мере, единственный способ с хорошей производительностью (?). Но я все еще слегка шокирован тем, что такого рода «проблемы» не обсуждались ни на одной из страниц, посвященных P/. Invoke и C++/CLI, которые я читал. И мне интересно, почему не весь нативный код неявно небезопасен, по крайней мере, при передаче на него указателей?
И наконец, было бы здорово, если бы существовали какие-нибудь способы чтобы защититься от этого. Признаюсь, я очень наивен, когда дело касается защиты памяти от записи. Я знаю, что ОС защищает от записи в память, которая не принадлежит процессу. Однако здесь мы находимся в одном и том же процессе или нет? Существуют ли способы (особенно в Windows) запретить машинному коду запись в любую управляемую память?

Подробнее здесь: https://stackoverflow.com/questions/792 ... can-we-pro
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»