 |
|

19.03.2022, 17:11
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
вы ебнутые? @legendabrn
какой нахуи std::string
C++:
Код:
#include
BOOL APIENTRY
DllMain
(
HMODULE
,
DWORD dwReason
,
LPVOID
)
{
if
(
dwReason
==
DLL_PROCESS_ATTACH
)
{
auto
samp
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
;
auto
addr
=
samp
+
0xE596Cu
+
29u
;
DWORD vp
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
1u
,
vp
,
&
vp
)
;
*
(
char
*
)
addr
=
'1'
;
VirtualProtect
(
(
void
*
)
addr
,
1u
,
vp
,
nullptr
)
;
}
}
|
|
|

19.03.2022, 17:16
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от SC6UT
вы ебнутые? @zTechnology @legendabrn
C++:
Код:
#include
BOOL APIENTRY
DllMain
(
HMODULE
,
DWORD dwReason
,
LPVOID
)
{
if
(
dwReason
==
DLL_PROCESS_ATTACH
)
{
auto
samp
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
;
auto
addr
=
samp
+
0xE596Cu
+
29u
;
DWORD vp
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
1
,
vp
,
&
vp
)
;
*
(
char
*
)
addr
=
'1'
;
VirtualProtect
(
(
void
*
)
addr
,
1
,
vp
,
nullptr
)
;
}
}
зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
|
|
|

19.03.2022, 17:17
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от legendabrn
зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.
|
|
|

19.03.2022, 17:18
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от SC6UT
ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.
если что, мы подменяем указатель на строку
|
|
|

19.03.2022, 17:20
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
в любом случае это UB, т.к. если кто то (к примеру другой плагин) будет пытаться обращаться к этой памяти, он скорее всего будет это делать как const char[], а там будет лежать указатель на std string
|
|
|

19.03.2022, 17:22
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от 4el0ve4ik
че ты несешь, там указатель на саму строку...
Сообщение от legendabrn
std::string chatSAMP{ "SAMP 0.3.7 R1" }
Сообщение от legendabrn
*reinterpret_cast(module_samp + 0xB7C5) = &chatSAMP;
там указатель на std::string
|
|
|

19.03.2022, 17:25
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от SC6UT
там указатель на std::string

|
|
|

19.03.2022, 17:42
|
|
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами:
5145387
Репутация:
183
|
|
@4el0ve4ik @legendabrn вам повезло, что указатель на первом месте стоит
Сообщение от FYP
такой структурой
Lua:
Код:
typedef struct
_stdstring
{
union
{
char str
[
16
]
;
char
*
pstr
;
}
;
size_t length
;
size_t allocated
;
}
stdstring
;
@ShadowBroker да
|
|
|

19.03.2022, 17:46
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
с gcc компилятором ничего не работает.
как наверняка и со всеми другими если будет использоваться алокация на хипе, а не статический баффер размером до 15 байт, который используется в std string для коротких строк.
собрал только что msvc с длинной строкой, как и ожидалось оно не работает.
Сообщение от legendabrn
ведь если ему потребуется использовать строку больше 46 символов
а твой пример ваще никак не будет работать
|
|
|

19.03.2022, 18:05
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от SC6UT
с gcc компилятором ничего не работает.
как наверняка и со всеми другими если будет использоваться алокация на хипе, а не статический баффер размером до 15 байт, который используется в std string для коротких строк.
собрал только что msvc с длинной строкой, как и ожидалось оно не работает.
а твой пример ваще никак не будет работать
да, действительно есть такой косяк.
вот так работоспособно:
C++:
Код:
*
reinterpret_cast
(
module_samp
+
0xB7C5
)
=
&
chatSAMP
[
0
]
;
совершенно не обратил на это внимание.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|