- 307
- 218
Хз у него такой же вопросПодскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?
Народ подскажите что за адрес и для чего он нужен
GetModuleHandle("samp.dll") + 0x30B30
Хз у него такой же вопросПодскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?
Народ подскажите что за адрес и для чего он нужен
GetModuleHandle("samp.dll") + 0x30B30
Я видел :) Но, всё-таки, 3 года прошло.Хз у него такой же вопрос
У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - этоПодскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?
bool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );
, IDA дает такой листинг псевдокода:char __thiscall sub_10030B30(char *this, int a2, int a3, int a4, int a5, int a6, int a7)
{
int v7; // eax
char result; // al
v7 = *(_DWORD *)(this - 0xAAA);
if ( v7 )
result = sub_10036C30(
a2,
a3,
a4,
a5,
a6,
*(_DWORD *)(v7 + 1),
*(_WORD *)(v7 + 5),
0,
a7,
dword_100EC770,
dword_100EC774,
0);
else
result = 0;
return result;
}
.text:10030B30 sub_10030B30 proc near ; DATA XREF: .rdata:100D534C↓o
.text:10030B30
.text:10030B30 arg_0 = dword ptr 4
.text:10030B30 arg_4 = dword ptr 8
.text:10030B30 arg_8 = dword ptr 0Ch
.text:10030B30 arg_C = dword ptr 10h
.text:10030B30 arg_10 = dword ptr 14h
.text:10030B30 arg_14 = dword ptr 18h
.text:10030B30
.text:10030B30 mov eax, [ecx-0AAAh]
.text:10030B36 test eax, eax
.text:10030B38 push esi
.text:10030B39 jnz short loc_10030B41
.text:10030B3B xor al, al
.text:10030B3D pop esi
.text:10030B3E retn 18h
.text:10030B41 ; ---------------------------------------------------------------------------
.text:10030B41
.text:10030B41 loc_10030B41: ; CODE XREF: sub_10030B30+9↑j
.text:10030B41 mov edx, dword_100EC774
.text:10030B47 push 0
.text:10030B49 push edx
.text:10030B4A mov edx, dword_100EC770
.text:10030B50 push edx
.text:10030B51 mov edx, [esp+10h+arg_14]
.text:10030B55 push edx
.text:10030B56 push 0
.text:10030B58 sub esp, 8
.text:10030B5B inc eax
.text:10030B5C mov esi, [eax] ; Ошибка доступа
.text:10030B5E mov ax, [eax+4]
.text:10030B62 mov edx, esp
.text:10030B64 mov [edx], esi
.text:10030B66 mov [edx+4], ax
.text:10030B6A mov edx, [esp+20h+arg_10]
.text:10030B6E mov eax, [esp+20h+arg_C]
.text:10030B72 push edx
.text:10030B73 mov edx, [esp+24h+arg_8]
.text:10030B77 push eax
.text:10030B78 mov eax, [esp+28h+arg_4]
.text:10030B7C push edx
.text:10030B7D mov edx, [esp+2Ch+arg_0]
.text:10030B81 push eax
.text:10030B82 push edx
.text:10030B83 add ecx, 0FFFFF222h
.text:10030B89 call sub_10036C30
.text:10030B8E pop esi
.text:10030B8F retn 18h
.text:10030B8F sub_10030B30 endp
[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ]
игру крашит. В 6 строчке переменной v7 присваевается значение по адресу this - 0xAAA
(в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?Это RPC, принимает 6 параметров (7 для thiscall). Чтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscallЯ видел :) Но, всё-таки, 3 года прошло.
===
У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - этоbool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );
, IDA дает такой листинг псевдокода:
C++:char __thiscall sub_10030B30(char *this, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // eax char result; // al v7 = *(_DWORD *)(this - 0xAAA); if ( v7 ) result = sub_10036C30( a2, a3, a4, a5, a6, *(_DWORD *)(v7 + 1), *(_WORD *)(v7 + 5), 0, a7, dword_100EC770, dword_100EC774, 0); else result = 0; return result; }
Тоже самое в asm:.text:10030B30 sub_10030B30 proc near ; DATA XREF: .rdata:100D534C↓o .text:10030B30 .text:10030B30 arg_0 = dword ptr 4 .text:10030B30 arg_4 = dword ptr 8 .text:10030B30 arg_8 = dword ptr 0Ch .text:10030B30 arg_C = dword ptr 10h .text:10030B30 arg_10 = dword ptr 14h .text:10030B30 arg_14 = dword ptr 18h .text:10030B30 .text:10030B30 mov eax, [ecx-0AAAh] .text:10030B36 test eax, eax .text:10030B38 push esi .text:10030B39 jnz short loc_10030B41 .text:10030B3B xor al, al .text:10030B3D pop esi .text:10030B3E retn 18h .text:10030B41 ; --------------------------------------------------------------------------- .text:10030B41 .text:10030B41 loc_10030B41: ; CODE XREF: sub_10030B30+9↑j .text:10030B41 mov edx, dword_100EC774 .text:10030B47 push 0 .text:10030B49 push edx .text:10030B4A mov edx, dword_100EC770 .text:10030B50 push edx .text:10030B51 mov edx, [esp+10h+arg_14] .text:10030B55 push edx .text:10030B56 push 0 .text:10030B58 sub esp, 8 .text:10030B5B inc eax .text:10030B5C mov esi, [eax] ; Ошибка доступа .text:10030B5E mov ax, [eax+4] .text:10030B62 mov edx, esp .text:10030B64 mov [edx], esi .text:10030B66 mov [edx+4], ax .text:10030B6A mov edx, [esp+20h+arg_10] .text:10030B6E mov eax, [esp+20h+arg_C] .text:10030B72 push edx .text:10030B73 mov edx, [esp+24h+arg_8] .text:10030B77 push eax .text:10030B78 mov eax, [esp+28h+arg_4] .text:10030B7C push edx .text:10030B7D mov edx, [esp+2Ch+arg_0] .text:10030B81 push eax .text:10030B82 push edx .text:10030B83 add ecx, 0FFFFF222h .text:10030B89 call sub_10036C30 .text:10030B8E pop esi .text:10030B8F retn 18h .text:10030B8F sub_10030B30 endp
При попытке использовать ее, передав в качестве this[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ]
игру крашит. В 6 строчке переменной v7 присваевается значение по адресуthis - 0xAAA
(в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?
Я же описал, что проблема не в передаче параметров, а в самом адресе. Ошибка происходит на инструкцииЧтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscall
mov esi, [eax]
при попстке доступа к неаллоцированной памяти.[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ] + XXX
, где XXX - всегда небольшое смещение меняющееся при перезапуске игры. Странно это...В структуре stLocalPlayer проверять iIsActiveКак в собейте проверить то, что игрок заспавнен?
if (iIsActive != 1) {
//Заспавнен
}
просто рисовать после негокак можно сделать свой рендер поверх другого?
GAME->GetWorld()->ProcessLineOfSight
CColPoint ** colCollision, CEntity ** CollisionEntity
Вроде как https://blast.hk/threads/32712/#post-323606Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?
does someone have address for chat input toggle on ?
#define SAMP_CHAT_INPUT_INFO_OFFSET 0x21A0E8 // pointer to pointer to structure stInputInfo
struct stInputBox
{
void *pUnknown;
uint8_t bIsChatboxOpen; // <------------------------------ maybe this?
uint8_t bIsMouseInChatbox;
uint8_t bMouseClick_related;
uint8_t unk;
DWORD dwPosChatInput[2];
uint8_t unk2[263];
int iCursorPosition;
uint8_t unk3;
int iMarkedText_startPos; // Highlighted text between this and iCursorPosition
uint8_t unk4[20];
int iMouseLeftButton;
};
typedef void(__cdecl *CMDPROC) (PCHAR);
struct stInputInfo
{
void *pD3DDevice;
void *pDXUTDialog;
stInputBox *pDXUTEditBox;
CMDPROC pCMDs[SAMP_MAX_CLIENTCMDS];
char szCMDNames[SAMP_MAX_CLIENTCMDS][33];
int iCMDCount;
int iInputEnabled;
char szInputBuffer[129];
char szRecallBufffer[10][129];
char szCurrentBuffer[129];
int iCurrentRecall;
int iTotalRecalls;
CMDPROC pszDefaultCMD;
};