|
|
|
Forum Member
      
участник
Last Login: 26.02.2006 19:24
Сообщ.: 30,
Visits: 331
|
|
Есть программа на Vb.net 2003.
Переписал ее на VC++. Что-то там оптимизировал в настройках, но работает в несколько раз медленнее.
Вопрос такой:
Так как я привык к Vb.net, можно ли не используя С++ оптимизировать на ассемблерном уровне программу Vb.net.
Программка маленькая (несколько кб) и есть один ответственный участок по скорости (цикл в цикле и сравнение)
Как подступиться? Возможно ли какой нибудь программой залезть в Exe-шник, найти этот кусок (думаю, что найду) и подправить его руками?
Или есть другие способы оптимизировать VB.net (или C#) именно на ассемблерном уровне?
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 24.08.2008 22:23
Сообщ.: 1 329,
Visits: 15 054
|
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="tvy2"]Так как я привык к Vb.net, можно ли не используя С++ оптимизировать на ассемблерном уровне программу Vb.net.[/quote]
Программы в .NET Framework транслируются не в ассемблер, а в так называемый MSIL код (MSIL = Microsoft Intermediate Language). Документацию по этому языку подробной не назовешь. Единственное что мне удалось найти это список инструкций
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemReflectionEmitOpCodesFieldsTopic.asp?frame=true
Компилировать код нужно с помощью утилиты ILASM. Так же будет полeзно пользоваться дизассемблером IL кода - ILDASM.
Оптимизировать программу используя IL код вполне можно, но для этого надо его очень хорошо знать и писать код лучше компилятора. Поэтому лучше все-таки воспользоваться советами данными тебе ранее:
- Оптимизировать алгоритм
- Использовать указатели и unsafe код на C#
|
|
|
|
|
Forum Member
      
участник
Last Login: 26.02.2006 19:24
Сообщ.: 30,
Visits: 331
|
|
Непонятно, exe-шник, это разве [bold]в конечном счете[/bold] не ассемблер, пусть и пропущенный через MSIL?
Его можно руками подправить, хакеры наверно так и делают. Какими инструментами?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="tvy2"]Непонятно, exe-шник, это разве [bold]в конечном счете[/bold] не ассемблер, пусть и пропущенный через MSIL?[/quote]
Нет, в любом случае. Ты путаешь ассемблер и машинный код. Ассемблер - язык программирования низкого уровня представляющий из себя мнемоники машинных команд. Компьютер может выполнять только машинный код. Код программы .NET превращается в машииный код на зтапе исполнения специальным JIT-компилятором. Причем это делается заново при каждом запуске программы. В самом EXE файле хранятся заголовки PE файла, метаданные сборки и код MSIL.
[quote="tvy2"]Его можно руками подправить, хакеры наверно так и делают. Какими инструментами?[/quote]
Дизассемблеры и шестнадцитиричные редакторы.
В случае .NET программ тебе будет нужен дизассемблер IL кода - ILDASM.
|
|
|
|
|
Forum Member
      
участник
Last Login: 26.02.2006 19:24
Сообщ.: 30,
Visits: 331
|
|
Попробовал ILdasm. Посмотрел во что превратилась программа. Удалось процентов на 30% ускорить использованием команд Goto. Дальше - тупик. Посмотрел команды - весьма ограниченны, в частности работы со стеком (например поменять местами - нет и т.п.).
Если я правильно понял, exe-шник, который компилируется - ненастоящий выполняемый, а некий промежуточный? Настоящий генерируется в памяти.
Есть подозрение, что должны быть утилиты (возможно и от Microsoft, ngen.exe-?), которые все-таки делают файл-настоящий exe-шник, на который уже и можно натравиться настоящим дизассемблером. Кто-нибудь знает?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="tvy2"]Попробовал ILdasm. Посмотрел во что превратилась программа. Удалось процентов на 30% ускорить использованием команд Goto. Дальше - тупик.[/quote]
Молодец.
[quote="tvy2"]Если я правильно понял, exe-шник, который компилируется - ненастоящий выполняемый, а некий промежуточный? Настоящий генерируется в памяти.[/quote]
Именно так.
[quote="tvy2"]Есть подозрение, что должны быть утилиты (возможно и от Microsoft, ngen.exe-?), которые все-таки делают файл-настоящий exe-шник, на который уже и можно натравиться настоящим дизассемблером. Кто-нибудь знает?[/quote]
ngen производит полную компиляцию указанного модуля, но его результатат работы тоже не является настоящим исполняемым файлом. Исходный файл остается неизменным, а результат работы ngen копируется в папку %WINDOWS%\assembly\NativeImages_vX.X.XXXX. При попытке запуска такого файла появляется сообщение что указанный модуль не является приложением Win32. Тем не менее никто не мешает тебе натравить на этот файл дизассемблер.
|
|
|
|