Изменение кода в runtime
От: Аноним  
Дата: 31.05.07 08:39
Оценка:
Здраствуйте.

Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?

Спасибо.
Re: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 08:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?


Штатных средств для этого нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Изменение кода в runtime
От: Roamer_KDN Россия  
Дата: 31.05.07 08:43
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?


L>Штатных средств для этого нет.


Изменить уже написанный нет но можно использовать динамические фрагменты кода, см.:System.CodeDom.Compiler.ICodeCompiler
Re[3]: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 08:44
Оценка:
Здравствуйте, 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>Штатных средств для этого нет.


а если не штатными то это возможно ?
Re: Изменение кода в runtime
От: stasukas  
Дата: 31.05.07 08:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?

Используя компиляцию, emit или CodeDom
http://rsdn.ru/article/dotnet/codegen.xml
Автор(ы): Андрей Корявченко
Дата: 19.03.2004
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft .NET — предварительной генерации кода. Рассматриваются различные подходы: использовании функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.
... << RSDN@Home 1.2.0 alpha rev. 669>>
C:\>DUMP StateOf(My.Brain) >> http://www.usecase.ru/
Re[2]: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 08:55
Оценка:
Здравствуйте, stasukas, Вы писали:

S>Используя компиляцию, emit или CodeDom

S>http://rsdn.ru/article/dotnet/codegen.xml
Автор(ы): Андрей Корявченко
Дата: 19.03.2004
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft .NET — предварительной генерации кода. Рассматриваются различные подходы: использовании функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.


Ни первое ни второе не позволяют менять код.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 08:55
Оценка:
Здравствуйте, <Аноним>, Вы писали:

L>>Штатных средств для этого нет.


А>а если не штатными то это возможно ?


Не знаю. Может быть и возможн.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Изменение кода в runtime
От: _FRED_ Черногория
Дата: 31.05.07 09:08
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Штатных средств для этого нет.

А>>а если не штатными то это возможно ?
L>Не знаю. Может быть и возможн.

А разве AspX не так работает? Запущен процесс, выполняется программа, вруг "бац!" некий файл (*.aspx, например) оказался изменён (он ведь может быть изменён и "изнутри" web-проекта). Аккуратненько перекомпилили и подцепили: разве не штатная самомодификация?
Help will always be given at Hogwarts to those who ask for it.
Re[5]: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 09:10
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А разве AspX не так работает? Запущен процесс, выполняется программа, вруг "бац!" некий файл (*.aspx, например) оказался изменён (он ведь может быть изменён и "изнутри" web-проекта). Аккуратненько перекомпилили и подцепили: разве не штатная самомодификация?


Нет, там создается новый класс, а не изменяется существующий.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Изменение кода в runtime
От: stasukas  
Дата: 31.05.07 09:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Ни первое ни второе не позволяют менять код.

"Менять код" — понятие растяжимое. Если необходимо менять байт-код, то да. А если есть некоторый шаблон, который при некоторых условиях меняется, то подходят все 3 варианта.
... << RSDN@Home 1.2.0 alpha rev. 669>>
C:\>DUMP StateOf(My.Brain) >> http://www.usecase.ru/
Re[4]: Изменение кода в runtime
От: Lloyd Россия  
Дата: 31.05.07 09:12
Оценка:
Здравствуйте, stasukas, Вы писали:

L>>Ни первое ни второе не позволяют менять код.

S>"Менять код" — понятие растяжимое. Если необходимо менять байт-код, то да.

"Менять код" подразумевае что на входе код, и после тоже код.

S>А если есть некоторый шаблон, который при некоторых условиях меняется, то подходят все 3 варианта.


Шаблон — это не код, а шаблон.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Изменение кода в runtime
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 31.05.07 09:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а если не штатными то это возможно ?


Если тело метода, то предположительно это можно сделать следующим образом:
получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос)
через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно
в рантайме не предусмотрена защита.
Re[4]: Изменение кода в runtime
От: Аноним  
Дата: 31.05.07 12:01
Оценка:
Здравствуйте, achmed, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>а если не штатными то это возможно ?


A>Если тело метода, то предположительно это можно сделать следующим образом:

A>получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос)
A>через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно
A>в рантайме не предусмотрена защита.

а можно пример кода?
Re[5]: Изменение кода в runtime
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 31.05.07 12:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, achmed, Вы писали:


A>>Здравствуйте, Аноним, Вы писали:


А>>>а если не штатными то это возможно ?


A>>Если тело метода, то предположительно это можно сделать следующим образом:

A>>получить указатель на метод который сгенерировал JIT (как сделать его сегенерированным это отдельный вопрос)
A>>через RuntimeMethodHandle.GetFunctionPointer,и записать в памяти нужные машинные инструкции ... если конечно
A>>в рантайме не предусмотрена защита.

А>а можно пример кода?


Нет, слишком долго ...
Re: Изменение кода в runtime
От: asofronov  
Дата: 31.05.07 13:18
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Вот задался недавно вопросом, можно ли каким либо способом во время выполнения программы написанной под .NET (неважно какой версии) модифицировать код программы ?


Это можно сделать при помощи Profiling API. В частности, есть метод ICorProfilerInfo::SetILFunctionBody который позволяет подменить тело метода во время выполнения. Также Unmanaged Metadata API понадобится скорее всего. Ну и писать по-видимому придется не на .NET, а на каком-нибудь нативном языке.
Re: Изменение кода в runtime
От: Осака Вестингауз  
Дата: 31.05.07 13:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А что насчёт 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
думаю надо копать где то тут рядом.

а вы как считаете?
Re[3]: Изменение кода в runtime
От: asofronov  
Дата: 01.06.07 07:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>я вот побрадил и накнулся на это: Modifying IL at runtime

А>думаю надо копать где то тут рядом.

А>а вы как считаете?


Да, это оно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.