
22.04.2017, 15:21
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Сообщение от Снежок
Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр
C++:
Код:
bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
101
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
int
qwe
=
params
->
bitStream
->
GetNumberOfBitsUsed
(
)
;
int
qq
=
(
qwe
-
16
)
;
params
->
bitStream
->
IgnoreBits
(
16
)
;
int
ww
=
BITS_TO_BYTES
(
qq
)
;
char
ttt
[
ww
]
;
params
->
bitStream
->
Read
(
ttt
)
;
std
::
string
str
(
ttt
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
ttt
)
;
//byte packId;
//params->bitStream->Read(packId);
//D3DCOLOR color;
//params->bitStream->Read(color);
}
return
true
;
}
Первое. Не надо юзать иды при чтении РПЦ. Большинство просто не помнят все иды на изусть и не удобно так читать. Юзай значение с eNum.
Второе. Код вообще не правильный. Если irpc это входящие РПЦ, то если мне память не изменяет, то он только исходящий, но может быть и входящим тоже. Прочекаешь
Третье. Вот тебе страница со структурами РПЦ. https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1
Четвертое. Вот тебе рабочий код и пример как вообще строки надо читать.
Код:
Код:
if (params->packetId == RPCEnumeration::RPC_ServerCommand) {
DWORD len;
char command[256];
BitStream *bs = params->bitStream;
bs->ResetReadPointer();
bs->Read(len);
bs->Read(command, len);
command[len] = '\0';
}
|
|
|