Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
Здравствуйте, <Аноним>, Вы писали:
А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
А>>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
L>Штатных средств для этого нет.
Изменить уже написанный нет но можно использовать динамические фрагменты кода, см.:System.CodeDom.Compiler.ICodeCompiler
Здравствуйте, Roamer_KDN, Вы писали:
L>>Штатных средств для этого нет.
R_K>Изменить уже написанный нет но можно использовать динамические фрагменты кода, см.:System.CodeDom.Compiler.ICodeCompiler
Вроде бы аффтор спрашивал именно об изменении.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Изменение кода в runtime
От:
Аноним
Дата:
31.05.07 08:45
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
А>>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
L>Штатных средств для этого нет.
Здравствуйте, <Аноним>, Вы писали:
А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
Используя компиляцию, emit или CodeDom http://rsdn.ru/article/dotnet/codegen.xml
Здравствуйте, Lloyd, Вы писали:
L>>>Штатных средств для этого нет. А>>а если не штатными то это возможно ? L>Не знаю. Может быть и возможн.
А разве AspX не так работает? Запущен процесс, выполняется программа, вруг "бац!" некий файл (*.aspx, например) оказался изменён (он ведь может быть изменён и "изнутри" web-проекта). Аккуратненько перекомпилили и подцепили: разве не штатная самомодификация?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>А разве AspX не так работает? Запущен процесс, выполняется программа, вруг "бац!" некий файл (*.aspx, например) оказался изменён (он ведь может быть изменён и "изнутри" web-проекта). Аккуратненько перекомпилили и подцепили: разве не штатная самомодификация?
Нет, там создается новый класс, а не изменяется существующий.
Здравствуйте, Lloyd, Вы писали:
L>Ни первое ни второе не позволяют менять код.
"Менять код" — понятие растяжимое. Если необходимо менять байт-код, то да. А если есть некоторый шаблон, который при некоторых условиях меняется, то подходят все 3 варианта.
Здравствуйте, stasukas, Вы писали:
L>>Ни первое ни второе не позволяют менять код. S>"Менять код" — понятие растяжимое. Если необходимо менять байт-код, то да.
"Менять код" подразумевае что на входе код, и после тоже код.
S>А если есть некоторый шаблон, который при некоторых условиях меняется, то подходят все 3 варианта.
Здравствуйте, Аноним, Вы писали:
А>а если не штатными то это возможно ?
Если тело метода, то предположительно это можно сделать следующим образом:
получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос)
через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно
в рантайме не предусмотрена защита.
Re[4]: Изменение кода в runtime
От:
Аноним
Дата:
31.05.07 12:01
Оценка:
Здравствуйте, achmed, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>а если не штатными то это возможно ?
A>Если тело метода, то предположительно это можно сделать следующим образом: A>получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос) A>через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно A>в рантайме не предусмотрена защита.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, achmed, Вы писали:
A>>Здравствуйте, Аноним, Вы писали:
А>>>а если не штатными то это возможно ?
A>>Если тело метода, то предположительно это можно сделать следующим образом: A>>получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос) A>>через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно A>>в рантайме не предусмотрена защита.
А>а можно пример кода?
Здравствуйте, Аноним, Вы писали:
А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
Это можно сделать при помощи Profiling API. В частности, есть метод ICorProfilerInfo::SetILFunctionBody который позволяет подменить тело метода во время выполнения. Также Unmanaged Metadata API понадобится скорее всего. Ну и писать по-видимому придется не на .NET, а на каком-нибудь нативном языке.
А что насчёт Edit and continue в студийном отладчике?
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: Изменение кода в runtime
От:
Аноним
Дата:
01.06.07 07:18
Оценка:
Здравствуйте, Осака Вестингауз, Вы писали:
ОВ>Здравствуйте, Аноним, Вы писали:
ОВ>А что насчёт Edit and continue в студийном отладчике?
к сожалению это не приемлимо
хотя может я не совем понял на что вы намекаете?
Re[2]: Изменение кода в runtime
От:
Аноним
Дата:
01.06.07 07:23
Оценка:
Здравствуйте, asofronov, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?
A>Это можно сделать при помощи Profiling API. В частности, есть метод ICorProfilerInfo::SetILFunctionBody который позволяет подменить тело метода во время выполнения. Также Unmanaged Metadata API понадобится скорее всего. Ну и писать по-видимому придется не на .NET, а на каком-нибудь нативном языке.
я вот побрадил и накнулся на это: Modifying IL at runtime
думаю надо копать где то тут рядом.
Здравствуйте, Аноним, Вы писали:
А>я вот побрадил и накнулся на это: Modifying IL at runtime А>думаю надо копать где то тут рядом.
А>а вы как считаете?