Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev, подумай, каким святым духом будет работать драйвер файловой системы, если винда его не пустит к его данным на томе?

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 02:18 21-04-2011 | Исправлено: Qraizer, 02:18 21-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer, Вы вообще то в курсе как драйвера соотносятся с томами? Менеджер томов ищет подходящий драйвер фс и монтирует том. Всё. Драйвер фс имеет полный доступ к тому - он смонтирован для него с эксклюзивным доступом. Все остальные жестко обламываються - нужно сначала размонтировать том, а уже потом можно писать туда что-то.
 
Когда вы открываете том (или дисковое устройство) в режиме записи - система автоматически отмонтирует том (вырубая дравер фс для него). Закрывает - подмонтирует снова. Но системный том отмонтировать нельзя (помойму там сам драйвер фс и будет упираться, а не менеджер томов) - поэтому и запись на него не возможна. Открыть CreateFile или чем-ещё-там с GENERIC_WRITE у вас получиться. А вот WriteFile будет возвращать ошибку и ноль записаных байт.
Это относиться кстати также к томам содержащим файл подкачки, а не только системному. Если у вас виста/семерка - попробуте, вы убедитесь, что я прав.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 19:11 21-04-2011 | Исправлено: Molniev, 19:16 21-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev, осталось чуть-чуть.
Но - да, лучше не надо. Последствием может быть не только рухнувшая система, но и убитый том. Маловероятно, но возможно.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 00:04 22-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Molniev, осталось чуть-чуть.
- чего осталось? Я вас не понял.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 14:49 22-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Фух...
Я не знаю, что там была за тема, в результате которой было решено, что получить доступ на запись к системному тому невозможно, но не догадаться использовать ядерный уровень и драйвер фильтра FS, мягко говоря, непрофессионально. Намекать и дальше, увы, уже нечем, осталось только сказать решение, хоть в открытом доступе этого делать не хотелось - болваны руками всё пощупать, несмотря на "не влезай, убъёт", да ещё и не на виртуалке, всегда найдутся. Надёюсь, если что, все шишки посыпятся на Linux-NTFS Project.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 00:28 23-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Во первых в том споре фигурировало "без прав администратора" в изначальной версии и "с прикладного уровня" в конечной.  
Извиняюсь, что это не уточнил.
 
Во вторых, на уровне ядра само собой - "кто кого драйверистей". Нет никакой сложности творить из драйвера с системов абсалютно всё, что захочеться.
В третих. Вы что-то странное говорите: причем тут драйвер фильтр фс? Даже если вы сформируете ложный IRP, драйвер самой фс (поверх которого будет этот фильтр) для этого запроса все равно произведёт все проверки, что и для аналогичного с прикладного уровня. Для ...непосредственно в MFT..., о чем вы говорили сымым простым способом будет скомуниздить хенд тома у драфвера фс (нелегально), либо фильтр поверх дискового устройства (который этот хенд получит при срабатывании).

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 17:27 23-04-2011 | Исправлено: Molniev, 17:28 23-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev, у нас разговор ради разговора. Это называется флеймом. Давай либо переползать во флейм-тему, либо заканчивать.
Доступ уровня прямой записи на том "без прав администратора" не получит никто под любой NT based. Это раз. Так что ваш спор изначально не имел смысла. Для прямой записи тома права админа не нужны, нужен инсталлированный загодя драйвер, к которому есть DeviceIoControl()- или WriteFile()-доступ для не админов, каковой сам же драйвер и может обеспечить. Это два. Да, для его инсталляции нужен админ, этот случай не исключение (путь будет два с половиной). Ложный IRP не надо формировать. Драйвер уровня фильта FS нужен, чтобы внедриться в цепочку и иметь нужные привилегии. Да, я говорил о прямой записи в MFT, а для этого достаточно в нужные моменты дёргать драйвер устройства, а не драйвер файловой системы. А драйверу устройства неинтересно, кто его вызвал и зачем, он оперирует байтиками, портами и адресами, он даже (тут могу ошибаться) в иерархии стоит ниже дискового кэша. Это три. Так что тут всё правильно. Только фильтр FS всё-таки предпочтительнее, ибо они более универсальны, т.к. не зависят от железа, зато зависят от ФС, что как раз и надо - на FAT это делалось бы иначе. Фильтр устройства более геморрен, ибо там разновидностей поболе 2-х будет.
 
Добавлено:
Насчёт хендла тома... я вроде видел его свечение где-то в интерфейсах WDK FS. Т.е. скоммуниздить его можно и легально. Потом на всякий случай продублировать. Вот только сейчас уже не помню, и найти не могу.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 06:02 24-04-2011
arrhangel



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прошу помочь, пишу так:
 
 
start proc
 
local hSCManager:HANDLE
local hService:HANDLE
local acDriverPath[MAX_PATH]:CHAR
 
    invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE
    .if eax != NULL
        mov hSCManager, eax
 
        push eax
        invoke GetFullPathName, $CTA0("PS2Versuch1.sys"), sizeof acDriverPath, addr acDriverPath, esp
        pop eax
 
        invoke CreateService, hSCManager, $CTA0("PS2Versuch1.sys"), $CTA0("Nice Melody Beeper"), \
                SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \
                SERVICE_ERROR_IGNORE, addr acDriverPath, NULL, NULL, NULL, NULL, NULL
        .if eax != NULL
            mov hService, eax
            invoke StartService, hService, 0, NULL
            invoke DeleteService, hService
            invoke CloseServiceHandle, hService
        .else
            invoke MessageBox, NULL, $CTA0("Can't register driver."), NULL, MB_ICONSTOP
        .endif
        invoke CloseServiceHandle, hSCManager
    .else
        invoke MessageBox, NULL, $CTA0("Can't connect to Service Control Manager."), \
                            NULL, MB_ICONSTOP
    .endif
 
    invoke ExitProcess, 0
 
start endp
 
end start
 
 
он отвечает: Can't register drive
 
немогу понять почему?  

Всего записей: 4 | Зарегистр. 14-01-2006 | Отправлено: 22:18 25-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. Запущено с правами администратора? Выше xp нужно явно запустить от имени админа.
2. Какой код ошибки возвращает вызов GetLastError ?

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 22:35 25-04-2011
arrhangel



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спосибо за быстрый ответ,
 
да запускаю как админ, иначе выдает:Can't connect to Service Control Manager.
на win 7  
GetLastError выдает 0, тоесть в еах = 0.  

Всего записей: 4 | Зарегистр. 14-01-2006 | Отправлено: 23:26 25-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GetLastError вы вызывали сразу после CreateService?
Заменить в OpenSCManager последний параметр на SC_MANAGER_ALL_ACCESS.
В CreateService: SERVICE_START + DELETE на SERVICE_ALL_ACCESS. SERVICE_DEMAND_START - разве драйвер может быть запущен отложено? замените на SERVICE_SYSTEM_START.  
 
И сделайте вызов MessageBox, выводящий, что вернула GetFullPathName в переменную acDriverPath.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 16:40 26-04-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Molniev

Цитата:
SERVICE_DEMAND_START - разве драйвер может быть запущен отложено?

Да в принципе может, почему нет?

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 18:46 26-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Да, вы правы. Я перепутал запуск драйверов по требованию и отложеный (delay или как там его) запуск служб (драйверами не являющихся).
arrhangel SERVICE_DEMAND_START, заменять не нужно. Допустимое значение.  
Ошибка скорей всего в отсутствии привелегии SC_MANAGER_CREATE_SERVICE - привелегии запуска и удаления вы указали, а привелегию установки нет. Так что пробуйте SC_MANAGER_ALL_ACCESS. И меня терзают сомнения, что вы правильно вызвали GetLastError (тобишь следующим api вызовом после CreateService, если вы это сделали после MessageBox то он и сбросил код ошибки в ноль).

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 20:30 26-04-2011 | Исправлено: Molniev, 20:35 26-04-2011
arrhangel



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
простите за долгое отсутствие,
Molniev вы были правы , вызывал после Messagebox, зделал так:
 
 invoke CreateService, hSCManager, $CTA0("PS2Versuch1.sys"), $CTA0("Nice Melody Beeper"), \
                SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \
                SERVICE_ERROR_IGNORE, addr acDriverPath, NULL, NULL, NULL, NULL, NULL
        
            invoke GetLastError
            invoke wsprintf, addr contener, addr string, eax
            invoke MessageBox, NULL, addr contener, addr string, MB_ICONSTOP
 
выдало ошибку 1073

Всего записей: 4 | Зарегистр. 14-01-2006 | Отправлено: 22:05 27-04-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arrhangel
1073 - ERROR_SERVICE_EXISTS. Сервис уже был создан ранее.
Тут надо сначала пробовать OpenService. А вот если она обломается и GetLastError вернёт 1060 (ERROR_SERVICE_DOES_NOT_EXIST), тогда уже звать CreateService.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:37 27-04-2011
arrhangel



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как так может быть если я этот сервис запускаю в первые?

Всего записей: 4 | Зарегистр. 14-01-2006 | Отправлено: 00:53 28-04-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arrhangel
А тут одного успешного вызова CreateService во время единственного запуска программы достаточно. Драйвер не до выхода из программы жить будет, он поселяется в системе насовсем. Точнее, пока его не убрать через DeleteService.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 01:20 28-04-2011
Chezara

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, хотел бы попросить помощи, задание у меня написать прогрмау на асемблере для интел 8080
и мне нужна комада корая проверяет на парность содержимое аккумулятора, если есть такая то буду очень признателен за помощь

Всего записей: 2 | Зарегистр. 06-05-2011 | Отправлено: 21:56 06-05-2011
borisdenis



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Chezara
 
Сорри

Всего записей: 784 | Зарегистр. 15-04-2006 | Отправлено: 22:42 06-05-2011 | Исправлено: borisdenis, 23:13 06-05-2011
Chezara

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не просил за меня делать я попросил подсказать одну команду

Всего записей: 2 | Зарегистр. 06-05-2011 | Отправлено: 23:04 06-05-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru