Компиляция и выполнение. В программе...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Компиляция и выполнение. В программе...

Сообщение ANDLL » 05.10.2004 (Вт) 13:53

Пусть в string1 находиться строка(и):
Код: Выделить всё
push word ptr[01512]
push word ptr[01520]
pop word ptr[01512]
pop word ptr[01520]
ret

1. Как теперь сделать так, что бы в string2 содержалось то же, но в машинных кодах? Я так понимаю, что для каждого оператора(типа push word ptr) есть свой байт, который указывает процессору, какая это команда, т.е. сие преобразуеться в что-то типа (FF00001512), где FF-код команды, а 00001512 - 4байтовый операнд. Или нет?
2. Можно ли написать такую функцию:
Код: Выделить всё
Public declare function CallString lib "xxx.dll"(byval nPos as long) as long

sub YYY
   CallString StrPtr([b]string2[/b])
end sub

И такую:
Код: Выделить всё
typedef void __stdcall simple_func(void);

long WINAPI CallString(long asm_ptr)
{
   ((simple_func)asm_ptr)();
   return 1;
}

Т.е. фактически, послать программу выполнять скомпилированную строку? Как я понимаю, тип такой функции __stdcall, или нет?

Только не спрашивайте, при чем здесь VB :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 14:09

Гы-гы-гы... (нервно, без всякой возможности сдержаться)

Чел! :)
Не занимайся тем, чем я, после некоторых раздумий, решил не заниматься :)

Безусловно можно послать строку на выполнение. Но.
Во-первых, тебе придётся обходить факт того, что строки в VB хранятся в юникоде. Интересно выслушать предложения :)
Во-вторых, тебе придётся всё-таки писать натуральный asm-компилятор.

Я вот делаю так: пишу фигнюшку в Дельфи, делаю библу и вырезаю искомый код :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 14:15

А почему так нервно?

Во-первых, правильно ли я понял то, о чем говорил в первом вопросе(о преобразовании операндов)?
Во-вторых простое предложение: заменить String на Byte(). Вот и все. А об asm-компиляторе: если я правильно понял то, о чем говорил то - пара пустяков(шутка, конечно, но ничего невыполнимого). Только не нервничайте... А то давление и прочее...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 14:46

Во-первых, о чём ты говорил в первом вопросе? Компилятор придётся писать, я ж говорю.
Во-вторых - это очевидно :) Но это уже запуск на выполнение не строки, а массива байт. А ты просил запуск строки. Массив байт - это мы завсегда...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.10.2004 (Вт) 16:11

Вообще-то исходники ассемблеров на VB есть (если это нужно).
Можно поискать на http://www.planet-source-code.com/vb/, к примеру...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 05.10.2004 (Вт) 17:19

идея очень неплоха, включил в проект класс "CAsm", задал массив строк и выполнил - красота!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 17:46

Ага. Идея классная. Я спрашивал: каков формат преобразования команд, т.е. :
ANDLL писал(а):Я так понимаю, что для каждого оператора(типа push word ptr) есть свой байт, который указывает процессору, какая это команда, т.е. сие преобразуеться в что-то типа (FF00001512), где FF-код команды, а 00001512 - 4байтовый операнд.

А строка и массив байтов - в чем разница?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 17:55

И являеться ли указанная функция __stdcall
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 18:25

А вот как ты её напишешь, такой она и будет являться...

Что касается "преобразования команд", то есть мануалы от Intel, великие и ужасные.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 18:39

GSerg, ты не понял. Именно та функция, которая написана в самом начале:
Код: Выделить всё
push word ptr[01512]
push word ptr[01520]
pop word ptr[01512]
pop word ptr[01520]
ret

Какой она являеться. Как правильно писать:
Код: Выделить всё
typedef void __stdcall simple_func(void);
//Или
typedef void __PASCAL simple_func(void);
//Или еще что-то
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 18:49

Сколько у неё параметров, скажи сначала мне...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 18:50

ноль. Т.е. это одно и тоже, так что-ли?
А если параметр один, то что тогда?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 18:52

Тогда, если это stdcall, последняя команда должна быть ret 4.
Если cdecl - ret.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 18:54

Стоп. Опять к наболевшей теме. Кто сказал, что stdcall функция возвращает значение DWORD??? Это точно?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 18:57

Результат функции - это то, что к моменту возвращения лежит в eax.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 18:59

А как тут:

Код: Выделить всё
double __stdcall ...

:?:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 19:05

Тут я знаю немного меньше :)
Но у математического сопроцессора (а с плавающими работает именно он) есть свой стек, туда оно дожно пихаться, а результат тогда - верхушка этого стека.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 19:20

OK. Спасибо. Разрядили ситуацию. Осталось только найти мануалы Intel и ... чего нибудь получится.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 19:25

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 19:26

Да, все... это одно целое...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.10.2004 (Вт) 19:32

Что??? 20Мб??? Это - список команд? Чувствую, мечта написать компилятор плавно того...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.10.2004 (Вт) 19:37

А ты думал, что для написания компилятора нужно знать только список команд??? Да у каждой нюансов...

Ну на :)
http://bbs.vbstreets.ru/download.php?id=1046
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 08.10.2004 (Пт) 4:33

ANDLL,
Я тоже написал ассемблер для VB.

Глянь по этой ссылке.
http://basicproduction.nm.ru/locasm/locasm2.zip

Может создавать BAS-файлы. Мануал пока не написал - сейчас пишу. Да и русскую версию нужно сделать.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 10.10.2004 (Вс) 4:54

Что то nm.ru совсем отстойным стал. Вот почти доделанная английская версия с хелпом.
http://www.pcpages.com/locasm/locasm.zip


Вернуться в Visual Basic 1–6

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

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

    TopList  
cron