Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: Проект Ассемблер в VB Добавлено: 11.06.04 21:13  

Автор вопроса:  @CyRax PTR | Web-сайт: basicproduction.nm.ru/ | ICQ: 204447456 

 Всем кому небезразлична судьба ассемблера в VB, посмотрите пример подготовительного проекта.
 http://basicproduction.nm.ru/ASM/BPASM.rar

Сам проект

http://basicproduction.nm.ru/ASM/VBASMPRJ.rar

 Что вы думаете насчёт принятия участия в этом проекте?
 Ассемблер предоставляет безграничные возможности для творчества и повышает скорость ваших алгоритмов. Да хоть новый БЕЙСИК написать внутри VB.
 А те кто не любят АСМ могут просто вызывать листинги или бинарники написанные другими. Если проект получит развитие, то можно будет создать и пополнять библиотеку машинных функций для VB6. Конечная цель - он станет стандартом для VB. Хотя бы в рунете.

 Я не несу никакой личной выгоды для себя. Просто хочется ускорить программы, написанные на VB. Проект можно разместить на этом или любом другом сайте по договорённости.

 Если вам не интересна эта идея - напишите соображения почему.

Ответить

  Ответы Всего ответов: 77  

Номер ответа: 1
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #1
Добавлено: 11.06.04 22:14
То что уже есть сделано тобой?

Ответить

Номер ответа: 2
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #2
Добавлено: 11.06.04 22:20
сам аддон
http://www.persistentrealities.com/files/inlineasm.zip
Тут читать
http://www.persistentrealities.com/vbfibre/index.php?category=0&item=5&t=asm


Уже всё довно есть ... вот прсотон никак найти не мог... сурс код вложен...

вот так выгледить будет примерно ....

Public Sub asmSinCosPointer(ByRef sngCosAngle As Single, ByRef sngSinAngle As Single)
'#ASM_START
'.MMX
' push ebp
' mov ebp, esp

' mov eax, DWORD PTR [ebp+8] ;'//First argument, store in eax (= value now!)

' fld dword ptr [eax] ;'//Get value for cos
' fsincos ;'//Execute sin/cos instruction
' fstp dword ptr [eax] ;'//Store cos in eax (1st param pointer!)

' mov eax, DWORD PTR [ebp+12] ;'//Second argument, store in eax (=value now!)
' fstp dword ptr [eax] ;'//Store sin in eax (2nd param pointer!)

' mov esp, ebp ;'//MOV/POP is much faster
' pop ebp ;'//on 486 and Pentium than Leave
' ret 8
'#ASM_END
End Sub

плюс аддон даёт много чего другого


Ответить

Номер ответа: 3
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #3 Добавлено: 11.06.04 22:22
Чего-то не удаётся скачать, проверь ссылку, а?
Выкидывает на Online Resource Center, оттуда на пустую страницу с одной ссылкой, а по ней снова на Online Resource Center. И так по обеим ссылкам по кольцу гоняет.

Ответить

Номер ответа: 4
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #4
Добавлено: 11.06.04 22:22
Такие как откомпилить консольное приложение или РЕАЛЬНУЮ ДЛЛ

Ответить

Номер ответа: 5
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #5
Добавлено: 11.06.04 22:25
У меня всё качается и всё октрывается...

Ответить

Номер ответа: 6
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #6
Добавлено: 11.06.04 23:12
cresta,
 не открывай в новом окне. А лучше сразу кидай ссылку в диспетчер закачек.

Fallout,
 да, написано мной. На английские надписи не обращай внимания. Это привычка с PB Navigator (кстати разработку его я прекращать не собираюсь).
 Не, ну конечно крутизну типа встраивания в IDE врядли будем делать (хотя как знать), а возможности такие:
 Запуск бинарника из строки, файла, ресурса. Подержка бинарников настоящих АСМ (у меня есть бинарник только на NASM). Компиляция налету (нужно таскать компилятор в программе). Сам компилятор написан на VB, поэтому никаких заморочек с пришиванием рантайма не нужно. Компилятор ведь в исходниках. Хочу ещё сделать поддержку русских мнемоник типа (ШЛИ АКК,СЧЕ или ПЕРЕШЛИ АККУМУЛЯТОР, СЧЁТЧИК и т.д.), но это для новичков. А представьте если хранится скажем у вас исполнимый код в виде мнемоник внутри программы? Его ж ни один антивирусник не определит. Представляете как легко модифицировать такой код? Но это для хакеров, а для созидателей можно понаписывать кучу библиотек или написать внутренний язык. Я кстати сравнивал цикл с PB-шным на 2 Млрд. Так VB АСМ ещё и выиграл 0.1 (1 десятую) секунды.

 Если тот в исходниках, то можно оттуда кода наворовать. Хотя если никто не проникнется этой идеей, то я один её поддерживать не буду - денег она всё равно не принесёт.

Ответить

Номер ответа: 7
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #7
Добавлено: 11.06.04 23:22
2@CyRax PTR хорошая работа...


Правдо при таком аддоне разве нужно что то ещё делать?... он компилит реальный асм.... да и ещё много чего

Ответить

Номер ответа: 8
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #8
Добавлено: 12.06.04 00:28
 Кому как больше нравится. К этому инлайну ещё и MASM качать можно. Т.е. он компилит только в дизайн-тайме. Конечно он профессиональный (наверное), но идея несколько другая. Т.е. одно другому не мешает. Мой - это чистый ассемблер. Ну да ладно, я же не настаиваю. Конечно аддон лучше. Это значит что тебе идея не понравилась?

Ответить

Номер ответа: 9
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #9
Добавлено: 12.06.04 00:30
>К этому инлайну ещё и MASM качать можно.
 Опечатка. Надо.
К этому инлайну ещё и MASM качать НУЖНО.

Ответить

Номер ответа: 10
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 12.06.04 00:42
Хм... Идея интересная :) Так можешь дойти и до программирования в HEX кодах :) Или до PowerBasic'a уже не далеко ;)

Т.е. как я понял ты хочешь повсюду таскать этот компилятор в ехе, и при необходимости, собирать из мнемоники на лету асьмовый код... А что если параметров будет более четырех, что тогда ???

А все-таки зачем делать свой компилятор, если можно воспользоваться, как в inlineasm микрософтовским, коли не секрет?

Ответить

Номер ответа: 11
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #11
Добавлено: 12.06.04 00:48
 Компилятор таскать по желанию. Посмотри исходник.
Модуль BPEXEC. Ведь он запускает уже компилированный файл. Ты можешь откомпилировать, а затем сохранить в текстбоксе(или ресурсе) или исходник или бинарник. Для исходника нужен компилятор, а для бинарника нет. Т.е. по выбору.
Кому что в голову взбредёт.

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 12.06.04 01:11
С этим то все ясно :) А вот как на счет если параметров нужно передать в функцию более 4-х ???

Может стоит написать свою функцию ??? По идее это не так сложно (если я ее назначение верно понимаю):
Запушить нужное кол-во параметров
вызвать функцию по адрессу

Ответить

Номер ответа: 13
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #13 Добавлено: 12.06.04 01:55
О 4-х параметрах: тут есть статья как вызывать CallWindowProc более чем с 4-мя параметрами, может пригодится, гляньте: http://www.vbstreets.ru/VB/Articles/65976.aspx

Ответить

Номер ответа: 14
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #14 Добавлено: 12.06.04 02:10
Думаю, это то что надо: (а может и нет :() - к статье прилагается проект и оттуда:

Public Function CallFunction(ByVal FuncName As String, ByRef FuncPointer As Long, ByVal ParamsCount As Long, Optional ByVal p1 As Long = 0, Optional ByVal p2 As Long = 0, Optional ByVal p3 As Long = 0, Optional ByVal p4 As Long = 0, Optional ByVal p5 As Long = 0, Optional ByVal p6 As Long = 0, Optional ByVal p7 As Long = 0, Optional ByVal p8 As Long = 0, Optional ByVal p9 As Long = 0, Optional ByVal p10 As Long = 0) As Long
  
  'Сделаем так:
  ' - если FuncPointer = 0, то проиходит вызов FuncName, а через
  ' FuncPointer возвращается указатель на эту функцию.
  ' - если FuncPointer <> 0, то происходит вызов этого самого FuncPointer,
  ' а FuncName игнорируется.
  
  ;Dim i As Long, t As Long
  ;Dim hGlobal As Long, hGlobalOffset As Long
  
  If ParamsCount < 0 Then Err.Raise 5 'invalid call
  
  If FuncPointer = 0 Then
    FuncPointer = GetProcAddress(m_hLib, FuncName)
    If FuncPointer = 0 Then Err.Raise 453 'function not found
  End If
  
  'Фишка первая: благодаря GlobalAlloc мы сразу имеем dword-aligned кусок памяти
  '5 байт для запихивания каждого нашего параметра в стек
  '5 байт - добавить вызов нашей функции
  '3 байта - почистить стек при cdecl
  '3 байта - ret 0x0010, выпихивая при этом и параметры CallWindowProc
  '1 байт - выравнивание, поскольку последний PutMem4 требует 4 байта.
  
  hGlobal = GlobalAlloc(GMEM_FIXED, 5 * ParamsCount + 5 + 3 + 3 + 1) 'Заполняем всё подряд, ZEROINIT не нуно.
  If hGlobal = 0 Then Err.Raise 7 'insuff. memory
  hGlobalOffset = hGlobal
  
  'Фишка вторая: у нас ведь подряд идущие byval long параметры...
  'А знаете ли вы, что у них подряд идущие varptr?
  'А что из этого следует, гы-гы-гы?
  
  If ParamsCount > 0 Then
    t = VarPtr(p1)
    For i = ParamsCount - 1 To 0 Step -1
      PutMem2 hGlobalOffset, asmPUSH_imm32
      hGlobalOffset = hGlobalOffset + 1
      GetMem4 t + i * 4, hGlobalOffset 'я долго этим гордился :)
      hGlobalOffset = hGlobalOffset + 4
    Next
  End If
  
  'Добавляем вызов функции
  PutMem2 hGlobalOffset, asmCALL_rel32
  hGlobalOffset = hGlobalOffset + 1
  PutMem4 hGlobalOffset, FuncPointer - hGlobalOffset - 4
  hGlobalOffset = hGlobalOffset + 4
  
  If m_CallType = eCDecl Then
    PutMem2 hGlobalOffset, &HC483 'add esp, imm8
    hGlobalOffset = hGlobalOffset + 2
    PutMem2 hGlobalOffset, ParamsCount * 4 'собственно imm8
    hGlobalOffset = hGlobalOffset + 1
  End If
  
  PutMem4 hGlobalOffset, &H10C2& 'ret 0x0010

  CallFunction = CallWindowProc(hGlobal, 0, 0, 0, 0)

  GlobalFree hGlobal
End Function

Ответить

Номер ответа: 15
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 12.06.04 03:04
Видел... что-то уж больно там запутано... или я совсем дурак :)

К примеру я не понял почему так, а не иначе:

  'Фишка первая: благодаря GlobalAlloc мы сразу имеем dword-aligned кусок памяти
  '5 байт для запихивания каждого нашего параметра в стек
  '5 байт - добавить вызов нашей функции
  '3 байта - почистить стек при cdecl
  '3 байта - ret 0x0010, выпихивая при этом и параметры CallWindowProc
  '1 байт - выравнивание, поскольку последний PutMem4 требует 4 байта.

Я не понял сущности этого цикла:
    For i = ParamsCount - 1 To 0 Step -1
      PutMem2 hGlobalOffset, asmPUSH_imm32
      hGlobalOffset = hGlobalOffset + 1
      GetMem4 t + i * 4, hGlobalOffset 'я долго этим гордился :)
      hGlobalOffset = hGlobalOffset + 4
    Next

Что-то он намудрил совсем... Откуда он эту инфу взял?

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам