Re[8]: Managed dll использование
От: mrozov  
Дата: 13.12.07 12:28
Оценка: -1
Здравствуйте, _Morpheus_, Вы писали:

Еще раз — КАКОЙ-ТО код там есть. Механизм jit-компиляции понятен и без тебя, это азбука.

_M_>это вызов который скомпилирует IL код в машинный и передаст ему управление. Аналогичный вызов будет стоять на всех точках входа экспортируемых функций.

Ах, да, во всех экспортируемых.... которых, правда, нету... ну это же мелочь, правда?

_M_>После этого этот джамп будет заменен реальным машинным кодом. Если не заглядывать во внутренности DLL, то разницы в ее использовании, за исключением проблемы с версиями фреймворка, по сравнению с обычной DLL нет.

После чего ЭТОГО, умник? ЭТОГО не будет.

_M_>А перед тем как ржать и ставить минусы, почитай хотябы Рихтера чтобы не писать глупости.

Рихтера читал, представь себе.


Ну и на все остальное — ты сам сознаешь, что этот подход ХАЧИТ .net сборку, нет? Что он ИЗМЕНЯЕТ ее формат, принудительно активировав инициализацию?
Есть и куда более простой способ, не требующий хакерства — сделать mixed-dll на Managed c++ / cli и все/ никаких проблем в дальнейшем.
Re[9]: Managed dll использование
От: Аноним  
Дата: 17.09.09 05:40
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Вот конкретный пример, расписанный по шагам...

_M_>3. Открываем файл test.il и вносим такие изменения ...

Начиная с версии .NET 2.0 достаточно указать в экспортируемых методах директиву
.export [<uniquenumeber>] as <name>
или
.export [<uniquenumeber>]
все остальное компилятор сделает сам.
К тому же, это позволяет без изменений компилировать исходный текст как под x32, так и под x64.

Вот первоисточник http://qinjunit.googlepages.com/NET.2.0.IL.Assembler.pdf

The good news is that version 2.0 of the IL assembler does not require these directives at
all, as long as the v-table and VTFixup table are used for unmanaged exports only. Just specify
the .export directives in the methods you want to export to the unmanaged world, and the
flags, the v-table, and its fixups will be generated automatically by the compiler, with the slot
size adjusted for the target platform:

.assembly extern mscorlib { auto }
.assembly YDD { }
.module YDD.dll
.method public static void Yabba()
{
.export [1]
ldstr "Yabba"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
.method public static void Dabba()
{
.export [2]
ldstr "Dabba"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
.method public static void Doo()
{
.export [3]
ldstr "Doo!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.