arthur2 писал(а): А я хочу, чтобы без загрузки рантайма работал экзешник. Хочу написать программку на одних АПИ, чтобы ей не нужен был рантайм.
Хакер писал(а):С помощью очень хитрых шаманств — получится. А смысл?
Хакер писал(а):столь сложная работа абсолютно не стоит насквозь неполноценного языка, который в итоге останется от VB
arthur2 писал(а):Я не хочу писать очень сложную программу, мне нужна простенькая - всё, что для нее надо, в АПИ есть
Option Explicit
Sub Main()
MessageBox 0, "ляляля", "трампампам", 0
End Sub
Хакер писал(а):Это очень сложный случай. Ты же говорил, что со строками будешь работать через API? А здесь не через API Тебе здесь потребуется самому реализовать __vbaExceptHandler (можно не реализовывать, а затирать в коде места, где идёт установка/снятие SEH-фрейма), а ещё __vbaStrToAnsi, __vbaFreeStrList.
Sub Main()
MessageBeep 1
End Sub
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
HelloWorld db "Hello World!", 0
.code
start:
invoke StdOut, addr HelloWorld
invoke ExitProcess, 0
end start
arthur2 писал(а):Ладно, пусть для начала будет что-нибудь совсем примитивное:
- Код: Выделить всё
Sub Main()
MessageBeep 1
End Sub
Function WinMain(hInstance As Long _
, hPrevInstance As Long _
, lpCmdLine As Long _
, nCmdShow As Long _
) As Long
Const WINDOWTITLE_CLIENT = "Communication Window to ucHook"
hwndTarget = FindWindow(vbNullString, WINDOWTITLE_CLIENT)
Хакер писал(а):С чего взял, что работает без рантайма?
arthur2 писал(а):С того, что код внутри функции обратного вызова хука.
Там FindWindowA... Кажется, я понял: там ведь, хоть рантайм и не загружен, msvbvm60.dll в таблице импорта библиотеки всё равно есть, и наверное, функции типа __vbaStrToAnsi вызываться всё-таки могут...
arthur2 писал(а):А как нужно объявить в тлб функции со строками, чтобы __vbaStrляляля были не нужны? Как Any? или передавать первый байт?
Хакер писал(а):Как лонг. И передавать VA строки. Причём потом добавить в релоки все места, где такие VA указаны.
Такой вариант будет работать?
Хакер писал(а):Такой вариант потребует ещё больше функций из msvbvm60
и как вычислить это место?Хакер писал(а):добавить в релоки адрес того места кода, где будет push-инструкция с этим адресом.
arthur2 писал(а):А что именно? присвоение байтам строки?
и как вычислить это место?
Кажется, действительно так от бейсика нифига не о станется
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28