Остановился бы D когда-либо, если бы имитирующий блок принятия решения о остановке H никогда не переставал бы его моделировать?

Остановился бы D когда-либо, если бы имитирующий блок принятия решения о остановке H никогда не переставал бы его моделировать?

      #define u32 uint32_t  

    
int D(u32 P) 
{
  if ( H(P, P) ) 
    return 0; 
  return 1;
} 

int main() 
{   
  H((u32)D, (u32)D); 
}

H симулирует частичную остановку на основе эмулятора x86. Его вход - это машинный адрес функции C, преобразованной в 32-битное целое число без знака. H имитирует свой первый параметр на входе своего второго параметра. В приведенном выше случае H имитирует D(D).

1 ответ

      int Simulate(u32 P, u32 I)
{
  ((void(*)(u32))P)(I);
  return 1; 
}

Если H () никогда не прекращал моделировать D (), то можно видеть, что поведение остановки D () будет таким же, как если бы D () вызывал Simulate () вместо H (), поэтому D () никогда не завершится.

Другие вопросы по тегам