работает если функция ((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 — работает независимо от опций компилятора