Ребят, нужна Ваша помощь. Обидно, что вопрос не по ассемблеру, но что поделать. Есть такая API функция CallWindowProc. C ее помощью можно выполнять ассемлерные инструкции и это один из способов делать ассемблерные вставки в VB программах. Но в Windows 98 VB почему то отказывается работать с этой функцией (пишет, что неверный вызов Dll), а откомпиленные проги падают в Access Violation. Если юзаю эту функцию из асма - все нормально работает под 98. Может кто натыкался на те же траблы? Помогите советом. Бросит нах VB не предлагать... нужно в декомпиле асм вставки юзать для его быстрой работы (потому он щас и не идет под 98)
GPcH Вапщета VB это виртуальная машина, а exe-шник представляет иссебя байт-код. Какие там нах могут быть ассемблерные вставки?
_DEN_ Вобщета о виртуальной машине забыли еще с приходом VB 5.0 еще в конце 90х годов. С тех пор VB позволяет компилять код в native code. насчет асм вставок в VB - почитай мои статьи на www.dotfix.net это реально. Но давай не будем оффтопить и отходить от вопроса. Всеж вопрос в том что косяк в 98... в других версиях винды все ok
GPcH Помнится на одном VB'шном сайте лежит ассемблер, написан на VB, в нем имеется возможность компилировать и исполнять код налету, распространяется с исходниками, вот интересно у него тоже траблы в win98, т.к. использует ту же функцию для запуска кода?
Asterix Знаю я о таком AddIn'е. Называется ThunderVB. Но! Он не работает если запускать программу из под IDE. Программу надо каждый раз компилировать. Если в Delphi или C++ это норма, то в VB есть только пикодовый отладчик и следовательно отлаживать прогу после компиляции можно будет только вручную (Олей к примеру или сайсом), а это ахтунг, особенно если идет речь о декомпиле, а не о какой нибудь мелкой проге, которую можно скомпилять и забить. Потому я и не юзаю это чудо техники. А CallWindowProc работает как в пикоде, так и в нативе - это API. Потому и хочу решить с ней проблемую. Может кто нибудь знает, как эту трублу решить
Есть идея, как можно замутить вызов асм кода подругому. Попробуй создать пустую функцию (содержащую немного нафиг не нужного кода), потом получи указатель на нее и с помощью VirtualProtect измени атрибуты страницы на PAGE_READWRITE, после чего вместно ненужного кода можно записать код который будет использоваться потом для авзова асм вставок. После этого асм функции можно будет вызывать посредством этого кода не сложнее, чем обычные VB функции. И в Windows 9х должно работать. В VB я не шарю, поэтому не уверен в осуществимости этого метода, но если это можно сделать, то я думаю получиться неплохая альтернатива CallWindowProc.
Ms Rem Ты мои мысли читаешь, брат Так вчера и сделал... но... это нифига не работает из IDE... опять приходится компилять перед проверкой работотоспособности... но это работает конечно, не спорю. Но хотелось бы оставить возможность отладки из под IDE. Жду еще предложения.
Ну, тогда можно еще таскать с программой DLL экспортирующую функции для вызова асм кода. Я думаю, сильно накладно это не будет.
Есть такая мысль, но на асме реализована еще и криптовка и декриптовка баз (почему писал на асме, чтобы скорость декриптовки не влияла на скорость работы декомпиля) и ее легко будет взломать/декриптовать/реверснуть 'ckb весь асм код будет выполнять Dll... этого я тоже не хочу. То есть тут настолько много всяческих нюансов, что хотелось бы всеже понять почему под ME/2000/XP CallWindowProc работает, а под 98 работает только если ее вызвать из проги на асме, в VB прогах почему-то не работает. Может кто поглядит... просто бывает такое, что свежий взгляд на одни и теже вещи часто решает вопрос Цитирую с сайта: LASM - это 32-битный ассемблер, написанный на VB. Компилированный код запускается с помощью API CallWindowProc. То есть проблема под 98 таже самая
GPcH Ты проверил или ты думаешь что у этого ассемблера та же проблема? Я надеялся что автор проблему решил, поэтому и привел ссылку, сам проверить не могу, потому что сейчас не использую win98, да и в отъезде я, в смысле не дома, и под рукой только ноут со скудным программным обеспечением %)
Asterix Блин... а я и не поглядел ту прогу, думал что с ней таже хрень... запустил под виртуал PC в 98 - работает. Поглядел код... короче там все параметры объявлены как DWORD и передаются по значению... а адрес в значение автор асма сам записывает. Короч ясно... хоть и извратный способ, но работает... пасиб... разобрался... Вопрос исчерпан Всем cпасибо