2010-12-19 3 views
0

Какое отношение (если есть) языка ассемблера MASM и ILASM. Есть ли одна к одной конверсии? Я пытаюсь включить Quantum GIS в программу Im kinda писать, когда я иду! У меня есть GIS на моем компьютере, у меня есть RedGate Reflector, и он или обозреватель объектов Visual Studio 2008 не смог открыть один (из нескольких из которых я не знаю, как они себя ведут) .dlls в Quantum. Я использовал редактор сборки MASM и «открыл» одну и ту же DLL, и это извратило то, чего я не ожидал, что обязательно пойму в первую очередь. Как я/могу ли я сделать преобразование того же «кода» в то, с чем я могу взаимодействовать в ILASM, а Im, предполагая, следовательно, в Csharp? Спасибо за тонну за чтение и все ответы на более ранние вопросы ... помните, что я относительно новичок в программировании на Csharp и еще более свежлив с MASM и ILASM.Какое отношение (если есть) языка ассемблера MASM и ILASM?

+0

Вы хотите преобразовать собственный код в код '.NET' (' IL')?! – Xaqron

ответ

0

Ther не имеет отношения между языком сборки MASM и ILASM. Я не вижу, чтобы вы могли преобразовать собственный код в IL-код. IL может быть понят CLR только тогда, когда язык ассемблера MASM содержит собственный машинный код. CLR превращает IL в собственный код во время выполнения

1

MASM имеет дело с инструкциями x86 и зависит от платформы/процессора, в то время как ILASM ссылается на команды .Net CIL (общий язык посредника), которые независимы от платформы/процессора. Переключение с чего-то определенного на нечто более общее трудно достичь, поэтому AFAIK нет конвертера от MASM к ILASM (инверсный, есть!)

+1

Дополнительная литература: сборка .NET (.dll или .exe) содержит инструкции CIL; эта статья MSDN немного объясняет процесс JIT и то, как он преобразует CIL в машинные инструкции во время выполнения - http://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.71).aspx. Более глубокое понимание процесс никогда не бывает плохим. –

1

IL - независимый от платформы уровень абстракции над собственным кодом. Код, написанный на платформе .NET на C#, VB.NET или на другом языке .NET, скомпилирован до сборки .EXE/.DLL, содержащей IL. Как правило, при первом запуске IL-кода среда выполнения .NET запускает ее через NGen, которая скомпилирует ее снова на собственный код и сохраняет вывод во временном месте, где он фактически выполнен. Это позволяет развертывать код платформы .NET на любой платформе, поддерживающей эту платформу .NET, независимо от процессора или архитектуры системы.

Как вы видели, Reflector отлично подходит для просмотра кода в сборке, потому что IL можно легко просмотреть в форме C# или VB.NET. Это связано с тем, что IL обычно представляет собой несколько инструкций более высокого уровня, а также содержит множество метаданных, которые обычно не имеют собственного кода, такие как имена классов, методов и переменных.

Также можно скомпилировать проект .NET непосредственно на собственный код, установив платформу проекта Visual Studio или позвонив по адресу Ngen.exe непосредственно на сборку. После этого очень сложно понять собственный код.