|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 3, 2004 23:55:43 Вот на досуге решил разобраться с драйверами и принялся читать статьи Four-F. Но пишу я не на масме, а на фасме, т.е. приходится все секции вручную расписывать. Все бы ничего, да вот беда: секция импорта у драйверов слегка отличается от обычной секции импорта PE. Нашел пример для фасма, но там секцию (точнее две) прописали руками, а это, сами понимаете, слегка неудобно. Не долго думая, пишу секцию импорта (точнее ее кусок INIT, а на rdata я забил :)) через стандартные макросы из поставки фасма. Компилю, запускаю. Драйвер работает. Ну а теперь, собсно, вопросы. Точнее, их целых 11: 01. Мне просто повезло, что драйвер работает, или же это какой-то хитрый случай? 10. Есть ли макросы Import и Library для KMD? 11. Почему радасм при компиляции драйвера ругается "make errors occured", хотя файл стабильно создается? |
|
|
Дата: Июн 4, 2004 17:16:11 Знаешь, я вот до сих пор понять не могу, какой кайф на асме KMD ляпать ?! Блин, ну, VxD, куда бы не шло ещё, тем более, что ддк тот ещё под асм порядочно заточен. Вот, сю взял, блин, проблем не знаю, если что, так асмовых строчек панафтыкал, и порядок. |
|
|
Дата: Июн 4, 2004 19:19:24 А зачем вобще на асме писать? Вот взял сю и телемаркет. Я не спрашиваю "стоит ли", я спрашиваю "как на фасме". А то, что все программы уже написаны и делфи проще асма в разы я итак знаю. |
|
|
Дата: Июн 5, 2004 06:20:47 Да, ты прав конечно. Но , асм, это если для удовольствия. А вот када тебя начальство долбит и планы скидывает, тут уж не до фасма и тем более удовольствия... |
|
|
Дата: Июн 5, 2004 14:57:37 · Поправил: n0p [offtopic & flame] Начальство и планы.. Я учусь в универе. Там нас силой заставляют писать все на С++. Но на фасме я бы все это сделал раза в 1.5 быстрее. Потому что я к нему привык и не задумываюсь над алгоритмами, а просто пишу их. Мне всегда приводят пример: статья на Assembler.ru. Большего субъективизма я не видел никогда. Если я на асме любой алгоритм напишу с той же скоростью, что и на сях, почему я должен жертвовать ресурсами своего слабенького компа и своими нервами? Может я в чем-то заблуждаюсь, но я не собираюсь делать то, что мне противно ни за какие бабки. Скажете, с такими принципами работу не найти? Ложь. Работы завались - искать надо уметь. И потом, всегда можно договориться - на работу принимают не роботы, а люди со своими слабостями. [/offtopic & flame] Ну а теперь по теме. МНЕ КТО-НИБУДЬ ПОМОЖЕТ??? |
|
|
Дата: Июн 5, 2004 16:24:19 > секция импорта у драйверов слегка отличается от обычной секции импорта PE. вполне окейный импорт. > Нашел пример для фасма, но там секцию (точнее две) прописали руками, а это, сами понимаете, слегка неудобно. фасм может сделать obj? если да, то делай obj и потом его линкуй чего угодно. если нет - тогда... тогда это неправильный транслятор! > Не долго думая, пишу секцию импорта (точнее ее кусок INIT, а на rdata я забил :)) а INIT тут с какого боку? равно как и rdata... секция импорта (если тебе нужна именно секция) должна быть расположена в .idata, но таблица импорта может быть где угодно и это будет работать ;) ну за одним исключением, траслятор адресов загрузчика не транслирует область адресов, лежащую ниже первой секции, поэтому таблица импорта, размещенная здесь грузится не на всех осях. |
|
|
Дата: Июн 5, 2004 18:03:58 kaspersky Фасм все умеет, но он на то и фасм, чтобы без линкера обходиться. Хотя и M$ COFF поддерживает. Насчет секции импорта. Как она называется загрузчик волнует мало. У меня в обычных PE секция импорта проходит под именем "import" :) чтобы проще было потом в ехе-шнике ковыряться. Фасм позволяет руками прописывать все секции и их атриботы (точнее он по-другому не умеет :)) С чего возник вопрос. А возник он как раз с этого примера и его обсуждения на форуме board.flatassembler.net. Там говорилось, что для корректной работы драйвера ему жизненно необходима секция INIT (хотя M$ утверждают, что загрузчику пофиг имена секций). И при этом секция импорта и секция INIT должны быть особыми. Хотя драйвер с обычной секцией как у PE спокойно зарегистрировался в системе и запустился. Вот для того, чтобы узнать истину, я и затеял ветку. |
|
|
Дата: Июн 5, 2004 18:28:34 > Там говорилось, что для корректной работы драйвера ему жизненно необходима секция INIT ну в общем-то, секция в которую указывает точка входа должна иметь атрибуты: Code | Discardable | Execute| Read | Write, в противном случае работоспособность драйвера не гарантирована (без Discardable вполне можно обойтись, но тогда бесполезный код будет бестолку болтаться в памяти), атриуты Code и Execute загрузчик так же пока не проверяет, но все же они желательны. как будет называться секция... ну тут есть много разных мнений, но все они неправильные ;) неверно, что загрузчик требует секции INIT, неверно, что загрузчик игнорирует имена секций. вот кусок XPшного ядра. INIT в нем прямым текстом. INIT:00599964 mov eax, [esi] INIT:00599966 cmp eax, 54494E49h INIT:0059996B jz short loc_5999B3 INIT:0059996D test byte ptr [esi+27h], 2 INIT:00599971 jnz short loc_5999B3 INIT:00599973 cmp eax, 45474150h INIT:00599978 jnz loc_599A57 дизассемблирование доказывает, что загрузчик _ожидает_ секцию с именем INIT, но корректно грузит файл даже с ее отсутствием. > И при этом секция импорта и секция INIT должны быть особыми что особого в секции INIT? обычная Discardable-секция. такие не только в драйверах, но и нормальных PE-Файлах не редкость. про секцию импорта не понял. что в ней особенного? вот в KERNEL32.DLL - да, там импорт особенный, в тхуках стоят не индексы, а эффективные адреса, а в драйверах импорт стандартный. хочешь с INT, хочешь с одной IAT... подробнее об этом в описании функции MmLockPagableDataSection |
|
|
Дата: Июн 5, 2004 18:29:52 Вобщем, после нескольких дней медитации, пришел вот к какому выводу. Загрузчику абсолютно пофиг как там секции называются и что там с импортом. Ему главное, чтобы по полученному из заголовка rva импорта он нашел то, что хочет. Для драйверов это тоже справедливо, единственный ньюанс - секция релоков. Она должна быть! Других отличий от обычного PE (кроме параметров линковки) замечено не было. Но если у кого-то на сей счет есть мнение и аргументы - пишите их сюда не стесняясь. |
|
|
Дата: Июн 5, 2004 18:33:24 kaspersky Спасибо, многого не знал. |
|
|
Дата: Июн 5, 2004 19:26:07 > Загрузчику абсолютно пофиг как там секции называются и что там с импортом не совсем. в каком-то из ядер при отсутствии Entry управление передавлось на начало INIT, ежели она была. как с этим сейчас - не в курсе, если кому интересно - может посмотреть загрузчик. другое дело, что инит-код может быть и не в секции INIT, а секция INIT можно и отсуствовать, но... традиция предприсывает ей место быть. про импорт. ну какой же драйвер обойдется без импорта. разве что бибикер какой. использовать native - пожароопасно, фиксированные адреса - тем паче. посему - без импорта не обойтись. другое дело, что импорт там вплне обычный ;) > Ему главное, чтобы по полученному из заголовка rva импорта он нашел то, что хочет вообще-то, XP использует не import, а IAT, но в отсутствии IAT'а сойдет и import. другое дело, что до некоторого времени в IAT мог быть всякий мусор, т.к. брался всегда INT (если есть), теперь же ситуация осложнилась и мусор в IAT может здорово аукнуться при загрузке. поэтому - либо вообще руки прочь от IAT, либо заполняет его предельно корректно (ложим сюда копию INT). > Для драйверов это тоже справедливо, единственный > ньюанс - секция релоков. Она должна быть! не совсем так. это частично верно для NT, но совсем не верно для XP. если файл явно задан как перемещаемый, то XP грузит его всегда не взирая на отсуствие релоков, а NT требует таблицы релоков, пусть даже пустой. далее, если image base выбран удачно, то до релоков дело просто не доходит (хотя закладываться на это нельзя). > Других отличий от обычного PE (кроме параметров линковки) замечено не было. отличия: кратность выравнивания 20h (как правило), виртуальные адреса совпадат с физическими, атрибут "пажабельности" учитывается, вообще несколько по другому обрабатываются атрибуты, ну и т.д. > Но если у кого-то на сей счет есть мнение и аргументы - пишите их сюда не стесняясь. так ведь это ;) есть спецификация на PE, там многое написано. а еще есть DDK. там, правда, непосредственно про PE очень мало, но поиск по секциями INIT, PAGE кое-что находит. ну и естественно дизассемблирование mmap, через который загрузка драйверов и реализуется... |
|
|
Дата: Июн 6, 2004 07:18:20 Откушав чего-то непотребного в студенческой столовой, загремел в инфекционную больницу с диагнозом острое отравление. В отделении нас было человек восемь, и из всех выделялся балагур Гриша, живой такой мужичок лет сорока. Именно с ним связан смешной и жуткий случай, коему я был свидетелем. Все началось с того, что в один прекрасный день нам решили сделать гастроскопию. Hе буду описывать эту унизительную процедуру, которая может нравиться разве что людям с определенными наклонностями, но без некоторых подробностей не обойтись. Сначала жертве делают клизму (стеклянная пипетка с резиновой трубкой и емкостью), затем минут пять заставляют терпеть усиливающиеся позывы, потом в туалет и, наконец, в лапы к врачу. Врач был почему-то вьетнамец, то ли работал по обмену опытом, то ли что-то еще, неважно. Я отмучался, и следующим на процедуру пошел Гриша. Вернулся он раньше времени, красный от стыда и давящийся от смеха. С его слов и со слов присутствующих там медсестер удалось восстановить картину произошедшего. Медсестра вставила Грише клизму, подождала, как положено, пять минут (Гриша еще терпит) и тут увидела, что кончик стеклянной клизменной пипетки обломан. Посмотрела на полу - нету. Вывод - обломался в заднице. Кинулась к врачу вьетнамцу (Гриша терпит из последних сил), врач, вникнув в суть проблемы, совершил свою роковую ошибку. Он забыл, что в Грише булькает водичка! Принятое им решение было, наверное, грамотным с медицинской точки зрения, но только не в этом случае. Доктор загнал корчащегося (думал от боли) Гришу на процедурный стол, поставил раком и заглянул ему в анус, проффессионально раздвинув руками Гришины ягодицы и при этом сказал: Hу-ка поднатужься . Как потом рассказывали медсестры, мощность залпа была такова, что, если бы не врач, перекрывший сектор обстрела, то пришлось бы отмывать окно. Звуковое сопровождение было оглушительным. Гриша, с легкостью в организме и тяжестью в душе, стремительно покинул место катастрофы. Последнее, что он видел, это стоящий посреди процедурной, обосраный с ног до головы горе-эскулап, повторяющий как заклинание: Спирт! Спирт! и содрогающихся от хохота медсестер, безуспешно пытающихся достать вату и спирт. Процедур в тот день больше не было. |
|
|
Дата: Июн 6, 2004 10:02:01 Случай веселый, но почему в этой ветке? %)) Я-то не против, но правила все-таки есть.. |
|
|
Дата: Июн 6, 2004 12:06:46 ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.082 |