кривая оптимизация cl .NET2k3, swallow_redpill()
От: eton  
Дата: 25.09.05 09:11
Оценка:
работает если функция ((void(*)())&rpill)() прыгает на содержимое rpill в стэке, не работает если та же функция прыгает на мусор в стэке
int swallow_redpill()
{
    unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
    *((unsigned*)&rpill[3]) = (unsigned)m;
    ((void(*)())&rpill)();
    return (m[5]>0xd0) ? 1 : 0;
}


cl /nologo /O1 /c /Zl /Zp1 — не работает
cl /nologo /O2 /c /Zl /Zp1 — не работает
cl /nologo /Og /c /Zl /Zp1 — не работает
cl /nologo /Ot /c /Zl /Zp1 — работает
cl /nologo /Od /c /Zl /Zp1 — работает
printf("%X\n", rpill) в любом месте — работает независимо от опций компилятора
rpill is static — работает независимо от опций компилятора
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.