|
::Главная страница :: Assembler :: Статьи :: |
RTFM_Helpers@yahoogroups.com - избранное.
4 октября 2001г. - 20 ноября 2001
1) Кто нибудь писал плугины для ФАРа, если да,
то не могли бы вы выслать исходники очень надо! Необходимо просто получить самы
простой шаблон, плугина! И еще ни кто не видел терминала(плугина такого) для
фара?
С уважением Михаил C. Мерзляков
Посмотри тут: http://www.programme.ru/index.phtml?arch/102001/102001_52.htm
Исходники тоже есть.
Андрей.
SDK с примерами всегда идет вместе с Far`ом в файле Far\PlugDoc.Rar
Плугины я писал. Парочку написал. В принципе, все необходимое
есть в инсталляции самого фара в архиве plugins.rar (хелпы, заголовки). Выслаю
сырец недоделанного плугина для сравнения
папок (там только шаблон, как и просили). Могу еще выслать работающий плугин
для редактора CppHelper, который расширяет возможности редактора FAR по редактированию
Сишных сырцов. Терминала не видел. Вообще в инете валяется огромная куча разных
плугинов - может и найдешь
2) Помогите плиз ! Я знаю, что программа запакована программой PEcompressor, где можно взять декомпресор, чтобы ЕХЕшник стал некомпресированым . И еще на СПЕКТРУМЕ была кнопочка MAGIC - сброс памяти на диск (дамп), слышал я, что такая прога есть и на РС, ссылочки дайте пжлста !
Если прога под ДОС - юзай cup386. Если мод винду - лучше
связки SoftICE + IceDump тебе не найти, если конешна руки не кривые.
Dr.Golova
Посмотри в каталоге Windows\command программу debug.exe.
Она может и в дамп скинуть память. А отличная инструкция к ней была в рассылке"Низкоуровневое
программирование для DZенствующих"
Андрей.
3) Мой вопрос таков: иногда в листингах мне встречаются
непонятные условные переходы.
К примеру:
==========
mov edx, ...
inc edx
jle адрес
Что именно должно здесь сравниваться и почему (иногда) происходит переход. Какие
флаги проверяются?
Какие именно флаги проверяются какой инструкцией
перехода можно посмотреть в любом справочнике. Конкретно для JLE переход выполняется
если выполняется условие (SF != OF or ZF = 1). Но это формальный подход. Содержательный
подход состоит в том, что jle после inc проверяет, стал ли результат меньше
(знаково!) или равен нулю. Например, INC 1 не даст этого условия, а INC -1 или
INC -100 дадут.Напомню: большинство инструкций устанавливают флаги в соответствии
с результатом. INC, SUB, CMP и подобные инструкции устанавливают флаги в соответствии
с результатом арифметических операций.
Best regards! Sincerely yours, Хемуль
Советикус.
Утомлённый чаем любитель сладкого, в девичестве Бильбо Ленивчатый.
4) Надо создать свой формат БД, с обычными полями я разобрался (делаю File of Record), но как быть, если надо иметь поле переменного размера, а именно Memo
Организовывать страничную систему. Например, выделять
в файле по 4K на каждый кусок текста (по аналогии с кластерами на диске). Как
их связать - вопрос второй. Можно держать для инофрмации о связях отдельную
страницу (a'la FAT), либо сслыку на следующую страницу держать в первых байтах
каждой страницы.
Best regards! Sincerely yours, Хемуль Советикус.
Утомлённый чаем любитель сладкого, в девичестве Бильбо Ленивчатый.
Делай под мему отдельный файл. Потом просто индексируешь с записями основной базы.
5) Я вот тут открыл один файл(конкретно - appath.asm
в дире masm32\m32lib)и увидел странный фрагмент кода:
; ...
@@:
lodsb
inc ecx ; count bytes
cmp al, 0
je @F
cmp al, "\"
jne @B
mov edx, ecx ; put count of each "\" in edx
jmp @B
@@:
invoke lstr,ADDR buffer,lpPathBuffer,edx
; ...
В принципе, как это работает - ясно. Только почему здесь стоит две _одинаковые_
метки? И переходы какие-то странные: jmp @B, jmp @F Таких и меток-то нету! Почему
jmp @B должен прыгать на верхнюю метку "@@", а jmp @F - на нижнюю?
Да и в некоторых других файлах я встречал метки, начинающиеся на @@. Что это
вообще за символ такой - @? Разъясните, плз.!
@@ - это анонимные метки. В отличие от всех остальных,
их разрешается использовать повторно.
jmp @F будет прыгать на ближайшую метку @@ вперед (F - означает Forward), а
jmp @B - на ближайшую метку @@ назад (B - Backward).
6) Народ, как в САйсе установить бреакпоинт на
вызов API из MSVCRT.dll, конкретнее на printf, на стандартные, типа Loadlibrary,
ставиться, а на printf - нет.
Igor
Это правильно что не ставятся - сначала надо подгрузить в сайс экспорт этой длл, короче RTFM до полного просветления.
Либо эту длл-ку надо прописать в winice.dat:
EXP=c:\windows\system\msvcrt.dll, а потом перезагрузиться. Либо можно загрузить
таблицу экспорта с помощью Symbol Loader: File-Load Exports.
vkim
7) Крайне нужна инфа по байткоду VB. Я понимаю
что M$ жмется на эту бадягу, но мне нужно хоть как-то ометить кусок кода в проге
чтоб потом в уже скомпиленной найти этот кусок и узнать его размер. Был бы асм
-мождно было бы вставить сигнетурку, а без асма как???
Dr.Golova
Смутная тема. Я VB стараюсь обходить стороной - жизнь
короткая, жалко ...В MSDN ничего нет. Вот, кажется все, что можно посоветовать:
Url: http://www.digitalrice.com/kaparo/files/compilers/jumpgen.zip
size: 9118
Url: ftp://exetools:member@ftp.exetools.com/Upload/vbdebug13e.exe
size: 432595
Вот еще было (но сайт в дауне)
Visual Basic Virtual machine files (latest version we have):
MSVBVM60.DLL v.6.0.89.64
MSVBVM50.DLL v.5.0.82.44
Symbolic debug files (DBG) files for use with the debugger:
MSVBVM60.DBG v.6.0
MSVBVM50.DBG v.5.0
Symbolic debug files (NMS) for use with SoftIce Symbol
Loader.
MSVBVM60.NMS
MSVBVM50.NMS
Url: http://www.suddendischarge.com/files/Debugging/vbdebugsup1.zip
size: 3786475
А чисто отметить, IMHO, вставить в исходник _подряд_ 3-5, например, сравнения
строк, а потом эти вызовы подряд уже можно будет найти. Если же где-то есть
больше - был бы рад узнать где :-)
8) Кто подскажет, как правильно читать из ком-порта
функцией ReadFileEx ? Особенно интересует как ПРАВИЛЬНО заполнить структуру
OVERLAPPED. По хелпу (Win32.hlp) получается, что:
1. Поля структуры OVERLAPPED, кроме hEvent можно не устанавливать при асинхронном
чтении.
Типа не совсем - для регулярных (дисковых) файлов надо заполнить Offset. Для COM-портов не надо.
2. Поле hEvent ДОЛЖНО быть установлено ДО вызова ReadFileEx.
Должно быть установлено до вызова ReadFile. В ReadFileEx Event не используется, а используется функция завершения
3. hEvent это указатель на событие (event), происходящее
при завершении чтения. Вопрос: откуда его взять ?
hEvent это не указатель (не совсем указатель), а Handle
заранее созданного тобой (с помощью вызова CreateEvent) объекта Event, который
является одним из объектов синхронизации, реализованных в ядре Win32. Event
- это такой (возможно именованный) объект, который один поток какого либо процесса
может в нужный момент взвести в сработавшее состояние (signaled state), а другой
(другие) потоки возможно даже другого приложения могут ожидать этого состояния
с помощью функций WaitForSingleObject или WaitForMultipleObjects или еще каких-нибудь.
Т.е. ты должен:
1. Создать Event с помошью вызова CreateEvent
2. Заполнить структуру OVERLAPPED
3. Вызвать ReadFile
4. Выполнять любые действия (среди которых может быть и проверка состояния операции
с помощью GetOverlappedResult)
5. ПРИ ЖЕЛАНИИ подождать момента завершения операции с помощью WaitForSingleObject(hEvent)
или еще чего Но все это относится к ReadFile и не относится к ReadFileEx
4. lpCompletionRoutine это указатель на процедуру завершения
операции чтения, когда вызывающий поток (tread) находится в "опасном состоянии
ожидания" (calling thread is in an alertable wait state). Вопрос: откуда
взять этот указатель ?
Sergey
Это указатель на ТВОЮ функцию, которую ты должен написать,
если хочешь, чтобы она вызывалась при завершении фоновой операции. Ведь ты хочешь
проанализировать, как она завершилась ? :)
Метод функции завершения операции можно считать альтернативным методом (по отношению
к Event) для определения завершения операции.
Кстати, IMHO "alertable wait state" переводится иначе и означает другое
(типа состояния, в котором допустимо прерывать поток для сообщения ему Alert-ов).
Можешь прочитать подробнее в том же help-е в разделе Alert Functions. Аналогичная
IMHO ситуация присутствует в классических UNIX-системах - сигнал, отправленный
процессу, который в данный момент находится в режиме ядра, откладывается до
момента выхода процесса из "ядреной" функции. Перед возвратом из ядра
в точку вызова проверяется, нет ли"подвешенных" сигналов, и если есть,
то выполняется их обработка. Таким механизмом ядро защищает себя от повторных
вхождений в критические секции кода.
Oleg Hohloff aka LonelyWolf
9) Киньте кто-нибудь в меня исходником, как на
билдере, используя функцию RegCreateKeyEx/RegSetValueEx записать по адресу HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\
подключ, в котором была-бы как значение прописана ком. строка (откуда запустили
экзешник). Кроме параметра по умолчанию ничего больше не смог установить. ???
В хелпе вроде все понятно, но не понятно, что подставлять в энту функцу. (Адрес,
строку или еще чаво...).
Zubkov Evgeny
На билдере не могу, нет билдера, но что есть то получи ...
.data RegistryExe db MAX_PATH dup(?) szKeyNameis db "Software\Microsoft\Windows\CurrentVersion\FoxyApp\",0 szStringValue db "Foxy Service",0 .code [...........] invoke SetRegKeysz , ADDR RegistryExe, ADDR szKeyNameis, ADDR szStringValue,SIZEOF szStringValue [...........] ;------------------------------------------------------------------------------ ; lets open and write a string key (creating it if necessary) ;------------------------------------------------------------------------------ SetRegKeysz PROC lpszString:DWORD, lpszKeyName:DWORD, lpszValueName:DWORD, dwStringLength LOCAL Disp :DWORD LOCAL pKey :DWORD invoke RegCreateKeyEx, HKEY_LOCAL_MACHINE, lpszKeyName, NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, addr pKey, addr lpdwDisposition .IF eax == ERROR_SUCCESS invoke RegSetValueEx, pKey, lpszValueName, NULL, REG_SZ, lpszString, dwStringLength invoke RegCloseKey, pKey .ENDIF ret SetRegKeysz ENDP
Sergey
10) Прога вылетает при обращении к Int 21h - па-ма-ги-теее прога - резидент - после запуска запоминает 80 нажатий клавиш(не учитывая расширенный сканкод) и при нажатии Alt+F4 должна выдавать коды всех нажатых клавиш... но вылетает... при прямом отображении в видеобуфер всё Ок... а так нет :( И для самых-самых вопрос... хочу из резидента обратиться к HDD... как сделать, чтобы никого не обидеть... в смысле писать на диск, только если на него никто не пишет PROG segment org 100h assume cs:PROG Start: jmp Init len equ 80 int_16_vect dd ? count dw 0 keys db '$', len dup(0) Int_16 proc pushf cmp ah,10h je GetIt Exit: popf jmp dword ptr cs:[int_16_vect] GetIt: cmp count, len je Exit call dword ptr cs:[int_16_vect] pushf push bp cmp al,0 je Print mov bp, count mov [keys + bp], al mov [keys + bp + 1], '$' inc count Return: pop bp popf iret Print: cmp ah, 6bh jne Return push ax push dx push ds mov ah, 9 push cs pop ds mov dx, offset keys int 21h pop ds pop dx pop ax jmp Return Int_16 endp Init: mov ax, 3516h int 21h mov word ptr int_16_vect, bx mov word ptr int_16_vect+2, es mov ah, 25h mov dx, offset Int_16 int 21h mov dx, offset init int 27h PROG ends end Start
Oleg Hohloff aka LonelyWolf
(С) Изобретателей фонариков на солнечных батарейках 2001
Низкоуровневое программирование для дZенствующих
http://hi-tech.nsys.by/
Составитель: Софронов
П.Н. (Lonely L)
Все права сохранены
30.11.2001
Харьков 2001
© Софронов П.Н. 2001
Тематические
ссылки
|
Ваша ссылка | Ваша ссылка |
Обмен кнопками, ведение статистики, реклама. |
|||