четверг, 2 сентября 2010 г.

Детект машинной инструкции PUSH/POP reg

Приведу одну из задачек, которые встречаются в практике написания кодо-анализитаторов. Есть код приведенный ниже, нужно оптимизировать и получить более эффективный по выполнению код:

 switch(Opc)
 {
 case 0x50: case 0x51: case 0x52: case 0x53:
 case 0x54: case 0x55: case 0x56: case 0x57:
 {
  std::cout << "This is PUSH reg instruction" << std::endl;
  break;
 }
 case 0x58: case 0x59: case 0x5A: case 0x5B:
 case 0x5C: case 0x5D: case 0x5E: case 0x5F:
 {
  std::cout << "This is POP reg instruction"  << std::endl;
  break;
 }
 default:
  std::cout << "This isn't PUSH/POP reg instruction" << std::endl;
 }
Ответ (http://www.base64.ru/):

CS8vINCe0LTQvdC+INC40Lcg0LLQvtC30LzQvtC20L3Ri9GFINGA0LXRiNC10L3QuNC5CglpZigoT3BjICYgMHhGOCk9PTB4NTApCgkJc3RkOjpjb3V0IDw8ICJUaGlzIGlzIFBVU0ggcmVnIGluc3RydWN0aW9uIiA8PCBzdGQ6OmVuZGw7CgllbHNlIGlmKChPcGMgJiAweEY4KT09MHg1OCkKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgaXMgUE9QIHJlZyBpbnN0cnVjdGlvbiIgIDw8IHN0ZDo6ZW5kbDsKCWVsc2UKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgaXNuJ3QgUFVTSC9QT1AgcmVnIGluc3RydWN0aW9uIiA8PCBzdGQ6OmVuZGw7

Комментариев нет: