[Испытание/Задача] "WTF", или что за херня происходит

Kailo

Участник
Сообщения
194
Реакции
896
Ваша задача объяснить работу кода.
PHP:
// © Maxim "Kailo" Telezhenko, 2017

#pragma newdecls required
#pragma semicolon 1

char g_sDick[] = "I love suck dicks!";

public int deref_func(int[] array, any[] target)
{
    int myoffset = -1;
    return array[myoffset];
}
#define Deref(%0) DereF(view_as<any>(%0))
int DereF(any[] target)
{
    int MyLove[1];
    return deref_func(MyLove, target);
}

public void OnPluginStart()
{
    RegServerCmd("wtf", Cmd_WTF);
}

void FuncA(int[] array, char[] str)
{
    int myoffset = -1;
    array[myoffset] = array[0];
    PrintToServer("%s", str);
}

public Action Cmd_WTF(int args)
{
    int array[1];
    array[0] = Deref(g_sDick);
    FuncA(array, "I love unicorns!");

    return Plugin_Handled;
}
P.S. В чат выведет "I love suck dicks!", а не "I love unicorns!".
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Jit у см остается довольно кривым. Подобный "код" должен сопутствоваться ошибкой "аут оф баундс", но на деле ты просто запутал адресацию в jit. Это как небезопасный указатель в сишке. Но по-идее, jit держит для каждого плагина собственное адресное пространство, по-этому ты смог залезть только в глобальную строку.
 
Сверху Снизу