Кто нибудь на форуме создавал свои отладочные движки?

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
daFix
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.10.2005 (Пт) 21:41

Кто нибудь на форуме создавал свои отладочные движки?

Сообщение daFix » 03.10.2007 (Ср) 18:52

Собственно сабж. Какие у кого возникали проблемы при их написании, и как вы их решали

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 03.10.2007 (Ср) 19:23

Вот пример:
Сразу говорю - не моё.
Вложения
Debugger.rar
(322.67 Кб) Скачиваний: 310
Подпись проходит рефакторинг

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 03.10.2007 (Ср) 19:27

Вот пример:
Сразу говорю - не моё


Боян!

daFix
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.10.2005 (Пт) 21:41

Сообщение daFix » 03.10.2007 (Ср) 20:09

Это я уже видел... Очень слабенький исходник, хреново написан. Единственное что там класс дизассемблера присутствует, а так ничего особого.
И ещё! Помоему тут на сайте валялся исходник демонстрирующий мультипоточность в VB приложениях, но ни как не могу его найти... Не завалялся ни у кого? И ещё один вопрос до кучи! Как узнать адрес своих функций? Помоему было что то типа AdressOf "Имя функции"... Примерно так, ни как не могу его вспомнить

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.10.2007 (Ср) 20:25

AddressOf ИмяФункции (без кавычек, и только как аргумент при вызове)
Изображение

daFix
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.10.2005 (Пт) 21:41

Сообщение daFix » 03.10.2007 (Ср) 22:16

О! Пасиба tyomitch! Всё работает =) Последний вопрос снимается :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.10.2007 (Чт) 8:58

Помоему тут на сайте валялся исходник демонстрирующий мультипоточность
Таких исходников полно, но многопоточность в vb работает исключительно криво.

Кстати, реально ли написать ActiveX dll допустим на с++, которая предоставляла бы возможность создавать потоки в vb? Учитывая существование в природе ntsvc.ocx (а сервис требует по крайней мере два потока), мне кажется, что это возможно.
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.10.2007 (Чт) 14:25

В Standard EXE -- невозможно.
В ActiveX EXE -- возможно и безо всяких сторонних примочек.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.10.2007 (Чт) 14:42

Кстати, реально ли написать ActiveX dll допустим на с++, которая предоставляла бы возможность создавать потоки в vb?


Можно и на PB написать Native DLL для работы с многопоточностью.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.10.2007 (Чт) 15:05

tyomitch писал(а):В ActiveX EXE -- возможно и безо всяких сторонних примочек.
Опаньки... А как? "Стандартно"? То есть Create/TerminateThread + pcode?
jangle писал(а):Можно и на PB написать Native DLL для работы с многопоточностью.
Кхм... Было бы круто, если б кто-нибудь написал... :roll:
Лучший способ понять что-то самому — объяснить это другому.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 04.10.2007 (Чт) 16:27

Antonariy
В ActiveX EXE надо просто выставить Thread Per Object и натравить CreateObject на самого себя. Всё, поток создан.

Если надо, могу накатать DLL, которая даст мультипоточность в VB ActiveX DLL - проинициализирует рантайм для потока и передаст куда надо управление.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.10.2007 (Чт) 20:31

Кхм... Было бы круто, если б кто-нибудь написал...


Там все просто, поддержка безопасной многопоточности встроена прямо в язык:

Код: Выделить всё
#COMPILE EXE

FUNCTION PBMAIN () AS LONG
DIM idThread(10) AS LONG, x AS LONG, s AS LONG
FOR x = 1 TO 10
THREAD CREATE MyThread(x) TO idThread(x)
NEXT x
DO
  FOR x = 1 TO 10
    THREAD STATUS idThread(x) TO s
    IF s THEN ITERATE DO
  NEXT
LOOP WHILE s
MSGBOX"All threads finished!"
END FUNCTION

FUNCTION MyThread (BYVAL x AS LONG) AS LONG
MSGBOX "Begin thread" & STR$(x)
SLEEP 1000
MSGBOX "Finished thread " & STR$(x)
END FUNCTION

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.10.2007 (Чт) 23:55

keks-n писал(а):Если надо, могу накатать DLL, которая даст мультипоточность в VB ActiveX DLL - проинициализирует рантайм для потока и передаст куда надо управление.

Не стоит. Мэттом Курландом всё уже написано и опубликовано.
И даже использовано мной в выложенном на этом форуме глобальном хуке.


jangle, у тебя просили библиотеку для поддержки многопоточного кода на VB, а не на IEEE-совместимом турбобейсике без нормальной среды и без поддержки COM.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.10.2007 (Пт) 16:33

tyomitch
Есть вопрос. Если рантайм ещё вообще никем не проинициализирован, и управление получает VB-шный код, то чего НЕЛЬЗЯ делать? Я могу вызвать внешнюю функцию, получить из неё указатель на интерфейс и с этим интерфейсом что-то сделать?

Просто есть мнение, что я смогу написать инициализацию рантайма для Native DLL непосредственно на VB и не мучить лишний раз линкер.

+ В последний раз, когда я видел часовой хук, я так и не понял, что там такое происходит :oops:... + Он не передаёт управление по цепочке хуков, вроде.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.10.2007 (Пт) 21:51

Да всё он передаёт.

Native DLL у тебя как кто собирается, как Standard EXE (как у GSerg-а со товарищи), или как ActiveX DLL? Во втором случае написать инициализацию рантайма непосредственно на VB очень просто. Я даже Хакеру в аську скидывал свои соображения по этому поводу.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.10.2007 (Сб) 5:19

Я даже Хакеру в аську скидывал свои соображения по этому поводу.


Может это был какой-то другой Хакер? Во-всяком случае, я что-то не припоминаю такого. Может у меня уже склероз старческий развивается?



ЗЫ. От чего-то не нравится мне этот топик сильно...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

daFix
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.10.2005 (Пт) 21:41

Сообщение daFix » 06.10.2007 (Сб) 11:39

А конкретно по сабжу ничего нету?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.10.2007 (Сб) 12:47

tyomitch
Как ActiveX. Я даже могу достучаться до оригинальной DllMain если надо. Пока инициализация идёт так:
1) CoInitialize
2) Оригинальный DllMain
3) LoadTypeLibEx, поиск первого попавшегося CoClass
4) DllGetClassObject, создание того класса
5) Рантайм проинициализирован и готов к работе

Есть одно НО - я не могу прилинковать объектник с импортами и приходится получать адрес GetProcAddress весьма экзотическим способом, который не хочет работать в висте. Я уж собирался искать в своей таблице импорта ссылку на msvbvm60.dll, а в её заголовке импорт GetModuleHandle и GetProcAddress.

Хочу туда воткнуть эмуляцию зарегестрированности DLL, т. е. её надо будет только грузануть в память.
Изображение


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList