void Test()
{
DWORD start, end;
// Получает начало функции (адрес в памяти)
_asm
{
CALL FuncStart
FuncStart : pop start
}
// Тут дичь вроде:
int a[100], b[200];
for (int i = 0; i<100; i++)
{
a[i] = 1 + rand() % 100;
b[i] = a[i] ^= 1;
b[i * 2] = b[i] * i;
}
double d[200]; // D означает Dich
for (int i = 0; i < 200; i++)
{
if (b[i])d[i] = b[i] / d[i];
}
// Получает конец функции (адрес в памяти)
_asm
{
CALL FuncEnd
FuncEnd : pop end
}
printf("Start: 0x%X | End: 0x%X | Len: 0x%X\n", start, end, end - start);
// Втираем дичь в этот сигмент
DWORD OldProtect;
VirtualProtect((LPVOID)start, end - start, PAGE_EXECUTE_READWRITE, &OldProtect);
for (int i = start; i < end; i++)
{
int ix = rand()%255;
memcpy((void*)i, &ix, sizeof(ix));
}
VirtualProtect((LPVOID)start, end - start, OldProtect, NULL);
}