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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
addhaloka



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127 20:52 11-09-2014
Цитата:
если для винды, то, наверное, rw MAX_PATH...

Наверно, для винды (KERNEL32.INC как бы намекает )
 
Benchmark 21:08 11-09-2014
Цитата:
path   rb   MAX_PATH*sizeof.TCHAR  

Думаю, что rw вместо rb должно быть достаточно, по идее, то же самое умножение на 2 получается. MAX_PATH*sizeof.TCHAR - не встречалось, чтобы так указывали, для fasma'а по-моему достаточно просто MAX_PATH.

Всего записей: 7432 | Зарегистр. 13-11-2010 | Отправлено: 23:03 11-09-2014
Benchmark



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

Цитата:
по-моему достаточно просто MAX_PATH

 
MAX_PATH - максимальное количество символов (а не байт) в пути. Для ANSI-функций это будет 260 байт, для юникодных - 260*2, т.е. 520 байт. И не забываем про финальный нулевой символ (в порядке перестраховки).
 
А MAX_PATH*sizeof.TCHAR - всего лишь умножаются две константы, одна из которых (sizeof.TCHAR) зависит от inc-файлов.
 
Так что, видимо, наиболее правильный вариант:
 
path   rb   (MAX_PATH+1)*sizeof.TCHAR

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 23:18 11-09-2014 | Исправлено: Benchmark, 23:19 11-09-2014
addhaloka



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Benchmark
Собрал я exeшки под каждый вариант и глянул в дизассемблере - получилось вот что:
rb   MAX_PATH*sizeof.TCHAR == rw MAX_PATH ;520 байт
rb   (MAX_PATH+1)*sizeof.TCHAR == rw MAX_PATH+1 ;522 байт
Работают все варианты, но наверно, по фэншую лучше второй вариант юзать? Упомянутый ранее rd MAX_PATH - похоже точно неправильно, там 1040 байт, а куда столько нужно?
Из-за нулевого символа в конце, получается вызов функции надо так делать:

Код:
invoke ExpandEnvironmentStrings,'%MYDOCS%',path,MAX_PATH+1
?
Чёто я уже запутался.
 

 

Всего записей: 7432 | Зарегистр. 13-11-2010 | Отправлено: 06:25 12-09-2014 | Исправлено: addhaloka, 06:45 12-09-2014
ne_viens

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

Если ExpandEnvironmentStringsW, тогда
path rw MAX_PATH
если ExpandEnvironmentStringsА, тогда
path rb (MAX_PATH + 1)
и
invoke ExpandEnvironmentStrings,'%MYDOCS%', path, sizeof path

Всего записей: 1528 | Зарегистр. 01-11-2004 | Отправлено: 08:53 12-09-2014
MERCURY127



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

Цитата:
Если ExpandEnvironmentStringsW, тогда
path rw MAX_PATH
а куда делся "плюс адын"?

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 11:05 12-09-2014
Benchmark



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

Цитата:
Из-за нулевого символа в конце

Этот символ - просто гарантия того, что даже путь максимальной длины (260 символов) всегда будет заканчиваться нулем. А вызывать надо, как написал выше ne_viens:
 
invoke ExpandEnvironmentStrings,'%MYDOCS%', path, sizeof path
 
ne_viens

Цитата:
Если ExpandEnvironmentStringsW, тогда
path rw MAX_PATH  

В этом случае тоже будет MAX_PATH+1, ибо нам нужен нулевой word в конце строки.
 
Вообще я выбрал
Цитата:
rb   (MAX_PATH+1)*sizeof.TCHAR
по простой причине - если есть и ANSI-, и Unicode-версии, эта строчка будет одинаково работать в обоих случаях.  
 

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 13:52 12-09-2014
addhaloka



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Benchmark 13:52 12-09-2014
Цитата:
А вызывать надо, как написал выше ne_viens:
 
invoke ExpandEnvironmentStrings,'%MYDOCS%', path, sizeof path  

В FASM'е макроса sizeof нет, что зачастую осложняет многое. Вообще всё и так работает, без проблем.
в fasm unicode:
;mdargs    rw MAX_PATH
invoke ExpandEnvironmentStrings,'%MYDOCS%',mdargs,MAX_PATH
 
в masm32 ansi:
;mydocvar    db '%MYDOC%',0
;mdocs       TCHAR MAX_PATH dup(?)
fn ExpandEnvironmentStrings,addr mydocvar,addr mdocs,MAX_PATH
 
Непонятка была с этими юникодными определениями, но вроде всё разъяснилось. Спасибо всем, кто участвовал.

Всего записей: 7432 | Зарегистр. 13-11-2010 | Отправлено: 20:58 12-09-2014 | Исправлено: addhaloka, 21:31 12-09-2014
Benchmark



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

Цитата:
В FASM'е макроса sizeof нет

Ну это... кагбэ... вот:
http://board.flatassembler.net/topic.php?t=12116&view=previous

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 21:44 12-09-2014
addhaloka



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Benchmark
Ну это же чёто неофициальное, в отличие от masm'ского sizeof? В SDK из оф. дистрибутива этого нет, а самому то конечно можно наопределять, но только нужно ли?

Всего записей: 7432 | Зарегистр. 13-11-2010 | Отправлено: 22:15 12-09-2014
binkat

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

Всего записей: 2 | Зарегистр. 29-08-2014 | Отправлено: 08:05 02-11-2014
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
binkat, мальшик, где твой мам-пап? надобно напомнить им основы воспитания дитей...

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 10:21 02-11-2014
SALLFRIS



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите как из хука на WH_GETMESSAGE получить код символа из lparam?
 
Есть вызов в основной программе

Код:
invoke    SetWindowsHookEx, WH_GETMESSAGE, eax, [hinstDLL], NULL

 
И процедура в dll  
 

Код:
proc KeyboardProc, nCode, wparam, lparam

 
Как сохранить\изменить  код символа введеного с клавиатуры? Понял что он в lparam хранится, а вот как его достать и изменить?  
P.S.FASM

Всего записей: 44 | Зарегистр. 22-06-2006 | Отправлено: 22:49 11-11-2014
MERCURY127



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

Цитата:
 
    LRESULT CALLBACK GetMsgProc(      
        int code,
        WPARAM wParam,
        LPARAM lParam
    );
 
Параметры
 
code
[in] Устанавливает, должна ли процедура фильтра (hook) обрабатывать сообщение. Если code - HC_ACTION, процедура фильтра (hook) должна обработать сообщение. Если code - меньше чем нуль, процедура фильтра (hook) должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx.
 
wParam
[in] Устанавливает, было ли сообщение удалено из очереди. Этим параметром могут быть одно из ниже перечисленных значений.
 
Значение     Предназначение
PM_NOREMOVE     Устанавливает, что сообщение не было удалено из очереди. (Приложение вызвало функцию PeekMessage, определяя флажок PM_NOREMOVE.)  
PM_REMOVE     Устанавливает, что сообщение было удалено из очереди. Прикладная программа вызвала GetMessage, или вызванная ею функция PeekMessage, определила флажок PM_REMOVE.)
 
lParam
[in] Указатель на структуру MSG, которая содержит детали о сообщении.
 
Возвращаемое значение
 
Если code - меньше чем нуль, процедура фильтра (hook) должна возвратить значение, возвращенное CallNextHookEx.
 
Если параметр code больше или равен нулю, очень рекомендуется, чтобы Вы вызвали CallNextHookEx и возвратили величину, которое она возвращает; в противном случае, другие прикладные программы, которые установили фильтр (hook) WH_GETMESSAGE,  не будут получать уведомления фильтра и,  в результате, могут повести себя неправильно. Если процедура фильтра (hook) не вызывает CallNextHookEx, возвращаемое значение должно быть нуль.
 
Замечания
 
Процедура фильтра (hook) GetMsgProc  может проверить или изменить сообщение. После того, как процедура фильтра (hook) возвращает управление системе, функция GetMessage или PeekMessage возвращает сообщение, вместе с любыми изменениями, в приложение, которое первоначально вызвало процедуру.
 
соответственно, в LPARAM будет указатель на структуру MSG  

Цитата:
 
    typedef struct {
        HWND  hwnd;
        UINT  message;
        WPARAM  wParam;
        LPARAM  lParam;
        DWORD  time;
        POINT  pt;
    } MSG, *PMSG;
 
Члены структуры
 
hwnd
 
Дескриптор окна, оконная процедура которого принимает сообщение.
 
message
 
Определяет код сообщения. Приложения могут  использовать только младшее слово; старшее слово зарезервировано системой.
 
wParam
 
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения члена структуры message.
 
 lParam
 
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения члена структуры message.
 
time
 
Определяет время, в которое сообщение было помещено в очередь.
 
pt
Устанавливает позицию курсора, в экранных координатах, в момент, когда сообщение было помещено в очередь.
 
в которой уже и надо смотреть, есть ли там вообще код символа, и если есть — там же его и менять.

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 11:35 12-11-2014
CTAC88

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

Всего записей: 4 | Зарегистр. 22-11-2014 | Отправлено: 14:25 22-11-2014 | Исправлено: CTAC88, 19:15 22-11-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пожалуйста...

Всего записей: 24104 | Зарегистр. 06-12-2002 | Отправлено: 02:14 23-11-2014
CTAC88

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

Всего записей: 4 | Зарегистр. 22-11-2014 | Отправлено: 15:34 23-11-2014 | Исправлено: CTAC88, 16:10 23-11-2014
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CTAC88, причем тут ассемблер? тебе сюда http://forum.ru-board.com/topic.cgi?forum=55&bm=1&topic=11525&glp

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 18:55 23-11-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А правдо если выполнить "nop" без цикла 311 раз, то хард диск отключится? Извините.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 18:40 26-11-2014
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:44 26-11-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
отключится, если выполнить 311 с половиной...

Всего записей: 24104 | Зарегистр. 06-12-2002 | Отправлено: 20:19 26-11-2014 | Исправлено: akaGM, 20:20 26-11-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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