• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Передача параметров в Api функции из Lotus-а

  • Автор темы Azrael
  • Дата начала
A

Azrael

Как соотносятся типы и значения параметров, функций, объявленных в Lotus-е с данными MSDN?
Собственно вопрос возник по функции keybd_event: на MSDN объявлена вот так:
Код:
VOID keybd_event(	 
BYTE bVk,
BYTE bScan,
DWORD dwFlags,
PTR dwExtraInfo
);

В Лотусе (из статьи про то, как сделать альбомную печать, где-то здесь на форуме ссылку видел):
Код:
Declare Sub keybd_event Lib "user32.dll" (Byval bVk As Integer, Byval bScan As Integer, Byval dwFlags As Integer, Byval dwExtraInfo As Integer)
Во-первых, почему bVk, bScan объявлены как Integer, впрочем, если заменить на As Byte не меняется абсолютно ничего... Во-вторых, и в главных, из той же статьи нажатие пробела вызывается вот так:
Код:
keybd_event 32, 0, 0, 0 ' Space key down
keybd_event 32, 0, 2, 0 ' Space key up
Тогда код клавиши &H20 - смотрим в MSDN, ему соответствует "D"... со всеми остальными - такая же ерунда
 
A

Akupaka

по-идее, должен быть как можно "ближайший" тип
функция примет лишь часть значения из памяти, т.е. если мы передаем число по типу "больше" чем принимаемый функцией тип, то функция примет лишь младшие N-бит, т.е. если функция принимает 8 бит, а ей передают 16, то примется лишь 8 младших битов... например, функция принимает байт, а ей передают слово (2 байта), тогда число 100 будет принято корректно, а число 47513 будет воспринято как 153 (1011 1001 1001 1001 -> 1001 1001)

правильно вызывается и будет пробел, на счет символа "D" то ли ты не правильно прочел, то ли там что-то не корректно написано, т.к. hex 20 = dec 32 = символ пробела...

на счет объявления, то форум - как бульварная пресса, нужно фильтровать и перепроверять, перед использованием.
к примеру, с сайта майкрософта я вот нашел такое объявление, более корректное,

Код:
Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

вот тут:

раньше, в VS 6, была тулза, которая определения API функций для VB содержала, сейчас я не знаю есть ли аналог... где-то подобное доставал, но не помню откуда...
 
K

Kee_Keekkenen

API Data Type <==> LotusScript Data Type

char, char* <==> ByVal String
char far* <==> ByVal String
int <==> Long (4-byte value)
long <==> Long
WORD, SWORD <==>Integer
DWORD <==> Long
INT, UINT <==> Integer
SHORT, USHORT <==> Integer
LONG, ULONG <==> Long
NUMBER <==> Double
BOOL <==> Long (in general, sometimes Integer)
BYTE, BOOLBYTE <==> Byte in R5+, cannot convert pre-R5
STATUS <==> Integer
HANDLE <==> Long (Integer on Mac and some UNIX)
HMODULE <==> Long
NULL <==> ByVal Integer (0)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!