Все же решил одним глазком заглянуть в идашку :)
Цель была найти самопальную функцию set_amxstring о которой писал Daniel_Cortez здесь.
Сначала нашел AMXPrintError по статическим данным, а там рядом оказалась та самая set_amxstring
Код:
.text:0046FCB0 ; int __cdecl sub_46FCB0(int, int, _BYTE *, int)
.text:0046FCB0 sub_46FCB0 proc near
.text:0046FCB0
.text:0046FCB0
.text:0046FCB0 arg_0 = dword ptr 4
.text:0046FCB0 arg_4 = dword ptr 8
.text:0046FCB0 arg_8 = dword ptr 0Ch
.text:0046FCB0 arg_C = dword ptr 10h
.text:0046FCB0
.text:0046FCB0 mov eax, [esp+arg_0]
.text:0046FCB4 mov ecx, [eax]
.text:0046FCB6 mov eax, [ecx+10h]
.text:0046FCB9 mov edx, [esp+arg_4]
.text:0046FCBD add eax, ecx
.text:0046FCBF add eax, edx
.text:0046FCC1 mov edx, [esp+arg_C]
.text:0046FCC5 test edx, edx
.text:0046FCC7 push edi
.text:0046FCC8 mov edi, eax
.text:0046FCCA jz short loc_46FCE6
.text:0046FCCC push esi
.text:0046FCCD mov esi, [esp+8+arg_8]
.text:0046FCD1
.text:0046FCD1 loc_46FCD1:
.text:0046FCD1 mov cl, [esi]
.text:0046FCD3 dec edx
.text:0046FCD4 test cl, cl
.text:0046FCD6 jz short loc_46FCE5
.text:0046FCD8 movsx ecx, cl
.text:0046FCDB mov [eax], ecx
.text:0046FCDD add eax, 4
.text:0046FCE0 inc esi
.text:0046FCE1 test edx, edx
.text:0046FCE3 jnz short loc_46FCD1
.text:0046FCE5
.text:0046FCE5 loc_46FCE5:
.text:0046FCE5 pop esi
.text:0046FCE6
.text:0046FCE6 loc_46FCE6:
.text:0046FCE6 mov dword ptr [eax], 0
.text:0046FCEC sub eax, edi
.text:0046FCEE sar eax, 2
.text:0046FCF1 pop edi
.text:0046FCF2 retn
.text:0046FCF2 sub_46FCB0 endp
.text:0046FCF2
.text:0046FCF2 ; ---------------------------------------------------------------------------
.text:0046FCF3 align 10h
Дизассемблер помог понять, что это та самая функция:
int __cdecl sub_46FCB0(int a1, int a2, _BYTE *a3, int a4)
{
_DWORD *v4; // eax
int v5; // edx
_DWORD *i; // edi
v4 = (_DWORD *)(a2 + *(_DWORD *)a1 + *(_DWORD *)(*(_DWORD *)a1 + 16));
v5 = a4;
for ( i = v4; v5; ++a3 )
{
--v5;
if ( !*a3 )
break;
*v4++ = (char)*a3; // та самая строка, о которой писал Daniel_Cortez
}
*v4 = 0;
return v4 - i;
}
Оставалось только заменить movsx(signed extension) на movzx(zero extend).
Для этого достаточно было просто записать по адресу где находится movsx значение 0xB60F
Адреса для 03DL:
Windows: 0x46FCD8
Linux: 0x80E1AC7