Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› WinObj, почему так не эффективно написано?
Посл.ответ Сообщение

Ранг: 57.1 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 24 июня 2010 17:29
· Личное сообщение · #1

Всем привет,решил глянуть как тулза работает и увидел:

Code:
  1. .text:00403D35 loc_403D35:                             ; CODE XREF: getNativeApi+5Ej
  2. .text:00403D35                 push    offset aNtopendirector ; "NtOpenDirectoryObject"
  3. .text:00403D3A                 push    offset ModuleName ; "ntdll.dll"
  4. .text:00403D3F                 call    esi ; GetModuleHandleA
  5. .text:00403D41                 push    eax             ; hModule
  6. .text:00403D42                 call    edi ; GetProcAddress
  7. .text:00403D44                 test    eax, eax
  8. .text:00403D46                 mov     NtOpenDirectoryObject, eax
  9. .text:00403D4B                 jnz     short loc_403D52
  10. .text:00403D4D                 pop     edi
  11. .text:00403D4E                 xor     al, al
  12. .text:00403D50                 pop     esi
  13. .text:00403D51                 retn


И таких кусков много! Почему так не эффективно написано? Ведь можно было один массив с передачей строк и массива куда складировать адреса. Компиллер виной или Руссинович обкурился?




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 24 июня 2010 17:49
· Личное сообщение · #2

sys_dev, Руссинович врядли обкурился, а писалось всё это не на MASM'е, так что наслаждайся прелистями компиляторов.
Кстати, может и Руссинович виной, т.к. смещение функций на каждой винде разное, и чтобы не копаться во всём массиве адресов, он взял и получил нужный адрес сам




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 июня 2010 17:58
· Личное сообщение · #3

Ты хочешь здесь Руссиновича найти или что? У него вообще, может, это задефайнено на 1 функу, проще её написать, чем париться с массивом. Это не брут, чтобы было критично оптимизировать каждую инструкцию, не вижу ничего страшного.
З.Ы. Сорцы где-то были софта от сисинтерналс, найди да погляди.



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 24 июня 2010 18:10
· Личное сообщение · #4

Когдато был в ХАИ на экзамене у системщиков... препод изрек прикольную фразу "Еслиб ВИН 95 был написан на асме то хватало бы 386го проца с головой, но разработка такого проэкта может и не закончилась"

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 июня 2010 19:26
· Личное сообщение · #5

WinObjEx есть если не устраивает WinObj

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 24 июня 2010 19:53
· Личное сообщение · #6

VodoleY, мало ли дураков. Тем более многие преподы не имеют никакого понятия о спец предметах, так что ничего страшного.

-----
Shalom ebanats!





Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 25 июня 2010 02:07
· Личное сообщение · #7

VodoleY пишет:
Еслиб ВИН 95 был написан на асме

Написан на смеси ASM и C, для чего был разработан специальный компилятор.
(Matt Pietrek "Windows 95 System Programming Secrets")




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 25 июня 2010 02:14
· Личное сообщение · #8

VodoleY пишет:
Еслиб ВИН 95 был написан на асме то хватало бы 386го проца с головой


А 386-го не хватало для 95-й винды? Речь только о системе или о прикладных программах тоже? Тогда и пня не хватало, чтобы ксингом быстро мп3 конвертить, куда уж там 386-му.
Зависимость от языка программирования и системных требований отнюдь не такая, как её пытался представить этот препод. Написанный на асме архиватор или видеокодер не будут жрать память и процессорные рессурсы? Ну-ну.

-----
EnJoy!




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 25 июня 2010 03:05
· Личное сообщение · #9

VodoleY пишет:
Еслиб ВИН 95 был написан на асме

То он бы никогда не заработал. А если бы заработал, то тормозил бы на чем угодно.
Быстро пишущийся код на асме всегда получается гораздо хуже, чем после оптимизирующего компилятора си.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 25 июня 2010 08:45 · Поправил: VodoleY
· Личное сообщение · #10

Не ну что за люди... это высказывание не руководство к действию типа а ну все поехали писать операционки на асме. были времена когда люди оптимизили код и он был красивый и быстрый. А что сейчас посмотри как работает VB или воще Шарп. когда вирус занимал 30 байт (ну ладно ванхалф 3500 так этож шедевр) а ща страшно смотреть ВИРУС 500КБ и спрашиваем А ЧЕ ТАК КУШАЕТ РЕСУРСЫ СОФТА
З.Ы. gazlan спасибо за инфу.. не знал

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 25 июня 2010 09:16
· Личное сообщение · #11

sys_dev
вызывается натив функция NtOpenDirectoryObject, и чтобы проверить её сущевствование идёт проверка при помощи её вызова, непрошла проверку программа тихо закрылась,или сообщила что мол под этой версии винды небуду работать.Было-бы она в табличке, а этой айпи неношлась в системной бибблиотек, или ей кликуху сменили , выскочила бы сообщение немогу найти точку входа в NtOpenDirectoryObject вот бы было позорище Руссиновичу

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 25 июня 2010 10:16
· Личное сообщение · #12

Я согласен с sys_dev - в общем только в этой функции лишних 280 где-то байт. А ведь еще другие. Автор прав - алгоритм можно заключить в цикл, который вообще можно написть рабочий на коленке и который на i7, например, полностью разложится на микрокоманды и будет целиком выполняться как одно целое. А выход в случае отсутствия адреса сделан скорее всего по стилю программирования. Кстати, не совсем оригинально - ну нет функции и хрен с ней, заменим чем-нибудь, в крайней случае функцию отключим, зачем в отказ сразу. Но для ускорения процесса написания я б тоже подобным образом написал, ведь редкость, чтоб не было какой-то функции. Если так, то проще будет немного переделать под другую ось. В общем на начальном этапе меньше заморачиваться на мелочах, первым делом основной функционал, чтоб отладить именно его. А тогда в конечном счете и ошибок меньше, ближе финал и полноценней тесты, клиент доволен - мы довольны, все довольны и полная гармония. Вот так.

-----
IZ.RU




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 25 июня 2010 18:12
· Личное сообщение · #13

А что страшного в этом коде?

/Не прикол, я действительно не понял/

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 25 июня 2010 20:06 · Поправил: DenCoder
· Личное сообщение · #14

Это фрагмент функции, функция целиком состоит из таких, всего их 23-24.

Всего лишь на оргигинальность не тянет по нескольким пунктам:
1) Излишность кода, зря развернутый цмкл;
2) Недостаток, неоптимизация в одном месте предполагает наличие других таких мест, также является слабым косвенным признаком бета-версии;
3) Если нет какой-то из 23-24 натив функций, Руссинович не хочет писать без нее, от него автор топика больше ждал :D

А вообще, sys_dev, судя по всему, это просто результат компиляции одной и той же строчки, скопипастенной и измененной для каждой нужной натив

Code:
  1. if(!(pFunc = GetProcAddress(GetModuleHandle("ntdll.dll"), "Func"))) return false;


-----
IZ.RU




Ранг: 57.1 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 26 июня 2010 00:45
· Личное сообщение · #15

>>Руссинович не хочет писать без нее, от него автор топика больше ждал :D
В точку! Я уже Руссиновича за Бога реверсинга начал .. ;) А тут такое увидеть , мягко сказать "не ожидал" ;




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 26 июня 2010 15:17 · Поправил: Coderess
· Личное сообщение · #16

Руссинович запредельный кодер, как и ntldr. У Рихтера тоже куча макросов, разные функции с дополнениями, им привычнее вызывать их, они к ним привыкли, как Archer уже сказал.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 26 июня 2010 16:34 · Поправил: Clerk
· Личное сообщение · #17

Coderess
> Руссинович запредельный кодер, как и ntldr.
Нуко нуко.. чего там запредельного ??
(сурсы NT кстате не только у Руссиновича есть).




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 26 июня 2010 17:48
· Личное сообщение · #18

Ладно, закрою флудотоп. Вообще изначально его создавать смысла не было.


 eXeL@B —› Программирование —› WinObj, почему так не эффективно написано?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати