Вопрос № 54767: Здравствуйте.
Что такое ТЕРМИНАЛ? Поподробнее.
Спасибо.
...Вопрос № 54768: Доброго времени суток уважаемые эксперты-ассемблерщики.
Мне очень понравилось в ДОС делать резиденты. Разыгрывать кого-либо.
Не давно встал читать вин32, а можно ли там делать резиденты. Перехватывать клавиатуру или следить за чем-то или кем-...Вопрос № 54769: Доброго времени суток уважаемые эксперты-ассемблерщики.
Как с помощью асма проверить свободное место на диске, в ДОС и в ВИН32.
Спасибо, всем.
..Вопрос № 54817: Здравствуйте ! А как на асме свернуть текущее окно ? Ну я имею ввиду окно, в котором выполняет прога....Вопрос № 54818: Здравствуйте. А как можно поместить в регистр случайное число ?...
Вопрос № 54.767
Здравствуйте.
Что такое ТЕРМИНАЛ? Поподробнее.
Спасибо.
Отправлен: 08.09.2006, 20:13
Вопрос задал: ENS (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mix_mix
Здравствуйте, ENS!
Так же, как и с загрузчиком, на этот вопрос нельзя ответить однозначно.
Терминал по другому можно назвать, как "консоль".
А консоль - это (имеется ввиду стандартная консоль IBM PC) клавиатура (устройство ввода) и монитор (устройство вывода).
В обиходе консолью называют просто приложение с текстовый видеорежимом с обработкой команд операционнной системой/оболочкой. Примером тому служит ОС Linux или cmd.exe/command.com в Win. Консоль по сути дела нужна для управления самой ОС и другими программами. Например в Linux, можно совершенно все сделать из консоли, не загружая графичекую оболочку, которая даже не включена в ядро.
Но в первоначальном значении, консоль - это связка клавиатура+диспей
Ответ отправил: mix_mix (статус: 6-ой класс)
Ответ отправлен: 09.09.2006, 18:55
Вопрос № 54.768
Доброго времени суток уважаемые эксперты-ассемблерщики.
Мне очень понравилось в ДОС делать резиденты. Разыгрывать кого-либо.
Не давно встал читать вин32, а можно ли там делать резиденты. Перехватывать клавиатуру или следить за чем-то или кем-то. Ведь касперски, нод , там какой-нибудь драйвер типа мыши это ведь резиденты.
Спасибо.
Отправлен: 08.09.2006, 20:13
Вопрос задал: ENS (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mix_mix
Здравствуйте, ENS!
К великому сожалению (и к счастью остальных), в Виндовсе нету прямого доступа к портам, нельзя выполнять привелигерованные инструкции. Конечно, можно перехватывать API функции (примерно тоже самое делает резидент) можно и под RING3, но данная методика имеет достаточно много недостатков. А если Вы хотите работать с устройставими (такими, как клавиатура, мышь т.д.), то Вам придется писать драйвер. Но у этого тоже есть свои недостатки. Хотя, драйвер можно и не писать, а пользоваться уязвимостями в системе (в 9х
свои, а в NT свои), которые помогут выполнить участок Вашего кода в RING0. Например, можете почитать здесь: http://www.wasm.ru/article.php?article=apihook_3 про перехват API под RING0 в WinNT
Ответ отправил: mix_mix (статус: 6-ой класс)
Ответ отправлен: 09.09.2006, 19:12
Вопрос № 54.769
Доброго времени суток уважаемые эксперты-ассемблерщики.
Как с помощью асма проверить свободное место на диске, в ДОС и в ВИН32.
Спасибо, всем.
Отправлен: 08.09.2006, 20:14
Вопрос задал: ENS (статус: 1-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Олег Владимирович
Здравствуйте, ENS!
В DOS у прерывания INT 21h есть функция AH=36h.
Её параметры (помимо AH): DL=номер_диска, а именно 0 - для текущего, 1 - для A, 2 - для B, и т.д.
Она возвращает:
- вариант 1. AX=0FFFFh. Ошибка - недопустимый номер диска. При этом CF не обязательно установлен!
- вариант 2. AX<>0FFFFh. Тогда
DX= число кластеров в диске
BX= число свободных кластеров
AX= число секторов в кластере
CX= число байт в секторе
Thus, свободно AX*BX*CX байт из AX*CX*DX доступных
Удачи!
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 2-ой класс)
Ответ отправлен: 09.09.2006, 20:58
Отвечает: Лысков Игорь Витальевич
Здравствуйте, ENS!
Ну а для Win32 смотри в MSDN функцию GetDiskFreeSpaceEx
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 11.09.2006, 10:29
Вопрос № 54.817
Здравствуйте ! А как на асме свернуть текущее окно ? Ну я имею ввиду окно, в котором выполняет прога.
Отправлен: 09.09.2006, 12:05
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Ответ отправил: Brutaller (статус: 2-ой класс)
Ответ отправлен: 09.09.2006, 14:20
Отвечает: Xaud
Здравствуйте, Whiteman!
Чтобы спрятать окно, достаточно выполнить нехитрую операцию:
invoke ShowWindow,hWnd,SW_HIDE
- собственно и происходит "прятание" окна от глаз пользователя.
Для вновь его появления со всеми исходными параметрами нужно вызвать ту же функцию, только с другим параметром:
invoke ShowWindow,hWnd,SW_SHOW
Окно появится как было!
Ответ отправил: Xaud (статус: 1-ый класс)
Ответ отправлен: 12.09.2006, 21:05
Вопрос № 54.818
Здравствуйте. А как можно поместить в регистр случайное число ?
Отправлен: 09.09.2006, 12:06
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: mix_mix
Здравствуйте, Whiteman!
Если Вам нужно просто случайное число, без каких-то промежутков/пределов, то после выполнения инструкции rdtsc в регистре eax будет как раз самое, что ни на есть случайное число.
Если нужно чило в каком-то промежутке (скадем, от 0 до 100), то можно легко приспособить предыдущий совет под Ваши нужды:
RDTSC
случ. число = EAX mod (верхний предел - нижний предел) + нижний предел
Ответ отправил: mix_mix (статус: 6-ой класс)
Ответ отправлен: 09.09.2006, 19:28 Оценка за ответ: 4
Отвечает: Олег Владимирович
Здравствуйте, Whiteman!
Если вам удастся использовать RDTSC, то вы - герой! Потому что:
1. Команда появилась в Pentium, и не все ассемблеры её понимают. Решение проблемы - DB 0Fh, DB 31h.
2. Она выполняется только в защищённом на нулевом уровне привилегий(!) или в реальном режиме (окно сеанса MSDOS не спасёт, надо перезагружаться в режиме MSDOS). Windows к 0му уровню просто так не допустит, а перезагружаться ради выполнения программы - можно, конечно,...
Предлагаю процедуру, которая записывает в AX случайное число из диапазона [0 .. AX-1]. Два недостатка - она требует 4 байта памяти:
RandA DW ?
RandB DW ?
и ещё инициализации:
RandInit PROC NEAR
PUSH AX
PUSH CX
PUSH DX
MOV AH,2Ch
INT 21h
MOV RandA,CX
MOV RandB,DX
POP DX
POP CX
POP AX
RET
RandInit ENDP
А теперь, собственно, главная процедура (точнее, функция :)
Rand PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH BP
PUSH AX
MOV AX,RandA
MOV BX,RandB
MOV CX,AX
MOV BP,8405h ;простое число
MUL BP
SHL CX,3
ADD CH,CL
ADD DX,CX
ADD DX,BX
SHL BX,2
ADD DX,BX
ADD DH,BL
MOV CL,5
SHL BX,CL
ADD DH,BL
ADD AX,1
ADC DX,0
MOV RandA,AX
MOV RandB,DX
MOV CX,DX
POP BP
MUL BP
MOV AX,CX
MOV CX,DX
MUL BP
ADD AX,CX
ADC DX,0
MOV AX,DX
POP BP
POP DX
POP CX
POP BX
RET
Rand ENDP
Примитивный пример использования:
CALL Init ;хотя бы один раз в программе
MOV AX,10
CALL Rand
INC AX;теперь в AX случайное число от 1 до 10
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 2-ой класс)
Ответ отправлен: 09.09.2006, 20:58