Вообще-то этот пример был придуман до того, как я запостил, на случай, если ты вдруг не поймешь, почему "нельзя". В качестве подобных примеров из области ПО приведу "нельзя использовать 2 антивируса вместе", "нельзя не патчить систему в сети", "нельзя на фишинговых сайтах писать свои данные", "нельзя сообщать админу свой пароль" не в смысле невозможности этого действия, а в смысле крайней его нежелательности. Хоть теперь-то понятно?
Я же и говорю - "я понимаю, что очень сложно осознавать свои ошибки".
Человек который задает в форуме .NET вопрос про ассемблерные вставки не ради простого интереса а с целю их использования мягко говоря большой оригинал.
ИМХО.
Грамотнее было бы спросить а как написать dllку на C++ c ассемблерными вставками чтобы ее можно было использовать в .NET
))))
Я же и говорю - "я понимаю, что очень сложно осознавать свои ошибки"
Он и опять ничего не понял Будем тренировать терпение.
В фразе "Нельзя переходить улицу на красный свет" слово "нельзя" обозначает "крайне нежелательно, может привести к очень плохим последствиям", не отрицая, тем не менее, возможность этого. К каким последствиям может привести использование вставок машинного кода в дотнет-текст?
1) Нечитаемость. Нарушение структурной целостности программы: по внешнему виду машинного кода, даже с обильными комментариями, сложно понять его структуру (циклы, условия) и ее место в структуре модуля, в который произведена вставка, что может привести:
а) к повторному написанию кода
б) к пропуску кода
в) к неправильному использованию результатов выполнения этого кода
2) Нестабильность. Непредусмотренность средств исполнения машинного кода разработчиками, программа будет весьма опасна в использовании, поскольку машинному коду никто не объяснял, что программа managed и контроль памяти автоматический. GC подкидывает сюрпризы и простому коду, а уж в случае с машинным кодом, даже при грамотном его написании, возможны любые неприятности, начиная с простого memory leak до удаленного исполнения произвольного кода, причем как в стеке, где DEP еще может помочь, так и в куче, где что-то рабочее придумать тяжело.
3) Некроссплатформенность. Дотнет не имеет механизмов для доступа машинного кода к вызываемым функциям среды, следовательно, для хоть какой-то функциональности придется прибегнуть к "грязным хакам", которые могут не работать не только на разных версиях винды, но и даже на разных версиях фрамеворка, либо работать нестабильно, причем поручиться за отсутствие критических сбоев (или, более того, возможности направленных атак) невозможно ("нельзя" в смысле невозможности какого-либо действия, чуешь тайд, чуешь?)
4. Финансовая невыгодность. Для того, чтобы использовать вставки машинного кода в дотнет-приложения, требуется иметь в штате сотрудников высококвалифицированных сотрудников, способных далеко не только тыкать мышкой по кнопочкам, и предоставить им значительное время для работы, поскольку трудоемкость совмещения дотнета с машинным кодом и последующего тестирования значительно превосходит почти любую возможную задачу, которую можно с его помощью решить в дотнет-приложении. А платить таким специалистам придется значительно больше, а продукт выйдет значительно позже, что выльется в банкротство проекта. Возможным является вариант с unmanaged DLL, но предпочтительным - написание проекта на языке программирования, поддерживающем ассемблерные вставки.
Суммируя все вышесказанное, повторю: "Вставки машинного кода в дотнете использовать НЕЛЬЗЯ!"