
10.07.2019, 23:22
|
|
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами:
5715860
Репутация:
78
|
|
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}
|
|
|

11.07.2019, 00:13
|
|
Новичок
Регистрация: 18.10.2015
Сообщений: 6
С нами:
5563739
Репутация:
0
|
|
Сообщение от Vadim.dll
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}
1. Второй аргумент функции имеет тип
, а не
.
2. В какой кодировке идет компиляция? Есть подозрение, что компилируешь с набором символов ANSI. В этом случае макрос GetModuleHandle заменяется на функцию GetModuleHandleA, принимает твою Юникод-строку, возвращает NULL и далее идет попытка вызова функции по адресу NULL + 0x64520 с ошибкой доступа.
|
|
|

11.07.2019, 00:48
|
|
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами:
5715860
Репутация:
78
|
|
Сообщение от index
1. Второй аргумент функции имеет тип
, а не
.
2. В какой кодировке идет компиляция? Есть подозрение, что компилируешь с набором символов ANSI. В этом случае макрос GetModuleHandle заменяется на функцию GetModuleHandleA, принимает твою Юникод-строку, возвращает NULL и далее идет попытка вызова функции по адресу NULL + 0x64520 с ошибкой доступа.
Пробовал с char - не помогает, Компилирую с набором символов Юникод, написал же выше, что адреса проверил, все правильно
|
|
|

11.07.2019, 01:53
|
|
Участник форума
Регистрация: 06.01.2016
Сообщений: 154
С нами:
5447649
Репутация:
28
|
|
Сообщение от Vadim.dll
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}
Эта функция имеет переменное количество аргументов
Сделай такой прототип функции
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
const
char
*
message
,
.
.
.
)
;
|
|
|

11.07.2019, 06:00
|
|
Постоянный
Регистрация: 21.08.2015
Сообщений: 343
С нами:
5646349
Репутация:
163
|
|
Сообщение от _Vine_
Эта функция имеет переменное количество аргументов
Сделай такой прототип функции
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
const
char
*
message
,
.
.
.
)
;
stdcall
переменное количество аргументов
фигню говоришь
Сообщение от Vadim.dll
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно
C++:
Код:
typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}
у тя прототип не правильный. а ещё ты берешь не указатель на структуру чата, а указатель на указатель на структуру чата. исправляй
|
|
|

11.07.2019, 12:22
|
|
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами:
5715860
Репутация:
78
|
|
Сообщение от memir
фигню говоришь
у тя прототип не правильный. а ещё ты берешь не указатель на структуру чата, а указатель на указатель на структуру чата. исправляй
Точно! Теперь заработало, спасибо!
|
|
|

11.07.2019, 15:15
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Как в ImGui можно сделать чтобы при измении размеров круг и трикутник не выходил за грани темно зеленого квадрата, а обрезался на грани

|
|
|

13.07.2019, 15:42
|
|
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами:
5715860
Репутация:
78
|
|
Где находится функция, которая обрабатывает RPC в samp.dll R1 или любой другой версии? Мне бы хотя бы наводку, как ее искать
|
|
|

13.07.2019, 16:52
|
|
Участник форума
Регистрация: 06.11.2016
Сообщений: 150
С нами:
5008255
Репутация:
18
|
|
0x3A6A0 - 0.3.7 R3 (вроде тут обработка RPC)
|
|
|

14.07.2019, 17:22
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Почему ошибка где-то в вот в этих строках
C++:
Код:
typedef
HRESULT
(
WINAPI
*
_EndScene
)
(
IDirect3DDevice9
*
)
;
//прототип
typedef
HRESULT
(
WINAPI
*
_Reset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
// они в разных файлах
typedef
void
(
*
_MyEndScene
)
(
IDirect3DDevice9
*
)
;
typedef
void
(
*
_MyReset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
Ошибка
____
Прикрепил исходник
_
Пофиксил
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|