Проблема с иласмом

У меня есть довольно большая программа в .net 3.5 SP1, которая отлично компилируется. Однако, когда я хочу запутать его с помощью Obfuscator Pro (оценка на данный момент), Obfuscator останавливается со следующей ошибкой:

[Вывод сборки] Это приложение запросило у среды выполнения необычное завершение его работы.
[Вывод сборки] Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации.
[Вывод сборки] ilasm вернул 3
[Вывод сборки] Вывод] Ошибка сборки.

Поскольку ошибка исходит от ILASM, я подумал, давайте сделаем то, что делает Обфускатор (без обфускации), и выполнил следующие команды:

=> ildasm.exe /OUT=C:\MyApp.exe.il /TEXT /NOBAR /RAWEH /QUOTEALLNAMES /UTF8 /LINENUM /FORWARD C:\MyApp\bin\Release\MyApp.exe
=> ilasm C: \MyApp.exe.il

Первая команда (ILDASM) проходит нормально, я получаю IL-файл размером 450 МБ.
Однако вторая команда (ILASM) вылетает со следующей ошибкой:

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

Кто-нибудь знает, в чем может быть ошибка?
Моя система — Windows 7 x64 с инструментами из Visual Studio 2008 (SP1).

ОБНОВЛЕНИЕ:
Я связался со службой поддержки Obfuscator и провел для них несколько тестов. Между прочим, там работают действительно полезные люди.
Мы обнаружили, что ошибка возникает только при использовании x86 ILASM из папки .net 2.0 framework. При использовании одного из framework64\v2.0... тогда ошибка не возникает.
Также при использовании (x86 или x64) ILASM из .net 4.0 (Beta 2) все проходит нормально.
Так что это действительно похоже на ошибку в ILASM .net 2.0 для x86.


person Marc    schedule 22.01.2010    source источник
comment
@Rubens Farias: Вы правы, до сих пор я не связывался с Microsoft :-) Хотя я не думаю, что это поможет. (все равно +1)   -  person Marc    schedule 22.01.2010
comment
@Rubens Farias: Да, это будет мой следующий шаг. Но я подумал, что сначала посмотрю, может ли кто-нибудь здесь помочь мне. Для меня это не похоже на проблему dotfuscator (или я сделал что-то не так, может быть, со ссылками на сборки или около того).   -  person Marc    schedule 22.01.2010
comment
в порядке; я удалю эти комментарии, чтобы не путать ответы людей   -  person Rubens Farias    schedule 22.01.2010


Ответы (1)


Хотя проблема с ILASM на самом деле не решена, проблема устранена следующим образом:

  • Используйте ILASM из папки framework64
    ILASM x64 работает нормально. Однако я не мог заставить Dotfuscator использовать его.
  • Установите .net framework 4.0 (бета-версия 2)
    При использовании ILASM из .net framework 4.0 все работает нормально.
  • Запустите Dotfuscator с флагом '/inpl:on'
    Служба поддержки Dotfuscator посоветовала мне использовать этот флаг, и все заработало нормально.
    По их словам, в сгенерированном EXE-файле не должно быть никакой разницы, поэтому я использую этот решение в настоящее время (флаг недоступен в графическом интерфейсе).
person Marc    schedule 15.02.2010
comment
Просто любопытно, сколько оперативной памяти у вас было, когда вы тестировали это? Вполне может быть, что использование 64-битного ilasm позволило вам выйти за пределы 4 ГБ. - person Johannes Rudolph; 22.03.2011
comment
@Johannes Rudolph: у меня было 4 ГБ ОЗУ в системе, когда у меня были эти проблемы. Я все еще использую x64 ILASM из .net 2, и он работает нормально. - person Marc; 23.03.2011
comment
Привет, Марк, спасибо, что вернули эту информацию. На самом деле вы, возможно, достигли порога раньше (например, 3,2 ГБ), но спасибо, что сообщили всем, что сработало для вас! - person Johannes Rudolph; 23.03.2011
comment
Я открыл командную строку Visual Studio 2008 в режиме администратора. На моем компьютере еще не установлен .NET 4.0. Эта команда не работает в .NET 3.5? Я продолжаю получать эту ошибку.... Разобрать: ildasm myTest.dll /out:myTest.il › Собрать заново: ilasm myTest.il /res:myTest.res /dll /key:myTest.snk /out:myTestSN .dll › Ошибка: «ilasm» не распознается как внутренняя или внешняя команда, - person MacGyver; 22.07.2011
comment
@Мистер. MacGyver: ilasm.exe должен находиться в папке C:\Windows\Microsoft.NET\Framework\v2.0.50727 (это версия .net 2.0 x86). - person Marc; 25.07.2011