ассемблерные вставки и .net
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



ассемблерные вставки и .net Expand / Collapse
Автор
Сообщение
19.10.2005 10:28
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 26.02.2006 19:24
Сообщ.: 30, Visits: 331
Есть программа на Vb.net 2003.
Переписал ее на VC++. Что-то там оптимизировал в настройках, но работает в несколько раз медленнее.
Вопрос такой:
Так как я привык к Vb.net, можно ли не используя С++ оптимизировать на ассемблерном уровне программу Vb.net.
Программка маленькая (несколько кб) и есть один ответственный участок по скорости (цикл в цикле и сравнение)
Как подступиться? Возможно ли какой нибудь программой залезть в Exe-шник, найти этот кусок (думаю, что найду) и подправить его руками?
Или есть другие способы оптимизировать VB.net (или C#) именно на ассемблерном уровне?
Сообщ. #882975
19.10.2005 10:42


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 24.08.2008 22:23
Сообщ.: 1 329, Visits: 15 054
Опять старая тема... Думаю проще и эффективнее написать алгоритм не требующий вложенных циклов.
Можешь переписать реализацию циклов на C# (используя unsafe) или неуправляемом C++ http://kubcat.subscribe.ru/archive/comp.soft.prog.dotnetgrains/200508/25174527.html#3, там получили увеличение производительности на 14%.
Если хочешь копаться в CIL, используй инструменты из .Net SDK, типа ILDASM.
Сообщ. #882977
19.10.2005 11:41
Supreme Being

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#
Сообщ. #882987
19.10.2005 18:18
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 26.02.2006 19:24
Сообщ.: 30, Visits: 331
Непонятно, exe-шник, это разве [bold]в конечном счете[/bold] не ассемблер, пусть и пропущенный через MSIL?
Его можно руками подправить, хакеры наверно так и делают. Какими инструментами?
Сообщ. #883039
19.10.2005 18:46
Supreme Being

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.
Сообщ. #883042
20.10.2005 16:09
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 26.02.2006 19:24
Сообщ.: 30, Visits: 331
Попробовал ILdasm. Посмотрел во что превратилась программа. Удалось процентов на 30% ускорить использованием команд Goto. Дальше - тупик. Посмотрел команды - весьма ограниченны, в частности работы со стеком (например поменять местами - нет и т.п.).
Если я правильно понял, exe-шник, который компилируется - ненастоящий выполняемый, а некий промежуточный? Настоящий генерируется в памяти.
Есть подозрение, что должны быть утилиты (возможно и от Microsoft, ngen.exe-?), которые все-таки делают файл-настоящий exe-шник, на который уже и можно натравиться настоящим дизассемблером. Кто-нибудь знает?
Сообщ. #883139
20.10.2005 16:23
Supreme Being

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. Тем не менее никто не мешает тебе натравить на этот файл дизассемблер.
Сообщ. #883144
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 9:14