Skip to content
Snippets Groups Projects
pointer_copy_user_ctrlflow_bytewise.c 6.53 KiB
Newer Older
Andre Maroneze's avatar
Andre Maroneze committed
int  x=1;
unsigned char control_flow_copy(unsigned char c) {
  assert(UCHAR_MAX==255);
  switch (c) {
  case 0: return(0);
  case 1: return(1);
  case 2: return(2);
  case 3: return(3);
  case 4: return(4);
  case 5: return(5);
  case 6: return(6);
  case 7: return(7);
  case 8: return(8);
  case 9: return(9);
  case 10: return(10);
  case 11: return(11);
  case 12: return(12);
  case 13: return(13);
  case 14: return(14);
  case 15: return(15);
  case 16: return(16);
  case 17: return(17);
  case 18: return(18);
  case 19: return(19);
  case 20: return(20);
  case 21: return(21);
  case 22: return(22);
  case 23: return(23);
  case 24: return(24);
  case 25: return(25);
  case 26: return(26);
  case 27: return(27);
  case 28: return(28);
  case 29: return(29);
  case 30: return(30);
  case 31: return(31);
  case 32: return(32);
  case 33: return(33);
  case 34: return(34);
  case 35: return(35);
  case 36: return(36);
  case 37: return(37);
  case 38: return(38);
  case 39: return(39);
  case 40: return(40);
  case 41: return(41);
  case 42: return(42);
  case 43: return(43);
  case 44: return(44);
  case 45: return(45);
  case 46: return(46);
  case 47: return(47);
  case 48: return(48);
  case 49: return(49);
  case 50: return(50);
  case 51: return(51);
  case 52: return(52);
  case 53: return(53);
  case 54: return(54);
  case 55: return(55);
  case 56: return(56);
  case 57: return(57);
  case 58: return(58);
  case 59: return(59);
  case 60: return(60);
  case 61: return(61);
  case 62: return(62);
  case 63: return(63);
  case 64: return(64);
  case 65: return(65);
  case 66: return(66);
  case 67: return(67);
  case 68: return(68);
  case 69: return(69);
  case 70: return(70);
  case 71: return(71);
  case 72: return(72);
  case 73: return(73);
  case 74: return(74);
  case 75: return(75);
  case 76: return(76);
  case 77: return(77);
  case 78: return(78);
  case 79: return(79);
  case 80: return(80);
  case 81: return(81);
  case 82: return(82);
  case 83: return(83);
  case 84: return(84);
  case 85: return(85);
  case 86: return(86);
  case 87: return(87);
  case 88: return(88);
  case 89: return(89);
  case 90: return(90);
  case 91: return(91);
  case 92: return(92);
  case 93: return(93);
  case 94: return(94);
  case 95: return(95);
  case 96: return(96);
  case 97: return(97);
  case 98: return(98);
  case 99: return(99);
  case 100: return(100);
  case 101: return(101);
  case 102: return(102);
  case 103: return(103);
  case 104: return(104);
  case 105: return(105);
  case 106: return(106);
  case 107: return(107);
  case 108: return(108);
  case 109: return(109);
  case 110: return(110);
  case 111: return(111);
  case 112: return(112);
  case 113: return(113);
  case 114: return(114);
  case 115: return(115);
  case 116: return(116);
  case 117: return(117);
  case 118: return(118);
  case 119: return(119);
  case 120: return(120);
  case 121: return(121);
  case 122: return(122);
  case 123: return(123);
  case 124: return(124);
  case 125: return(125);
  case 126: return(126);
  case 127: return(127);
  case 128: return(128);
  case 129: return(129);
  case 130: return(130);
  case 131: return(131);
  case 132: return(132);
  case 133: return(133);
  case 134: return(134);
  case 135: return(135);
  case 136: return(136);
  case 137: return(137);
  case 138: return(138);
  case 139: return(139);
  case 140: return(140);
  case 141: return(141);
  case 142: return(142);
  case 143: return(143);
  case 144: return(144);
  case 145: return(145);
  case 146: return(146);
  case 147: return(147);
  case 148: return(148);
  case 149: return(149);
  case 150: return(150);
  case 151: return(151);
  case 152: return(152);
  case 153: return(153);
  case 154: return(154);
  case 155: return(155);
  case 156: return(156);
  case 157: return(157);
  case 158: return(158);
  case 159: return(159);
  case 160: return(160);
  case 161: return(161);
  case 162: return(162);
  case 163: return(163);
  case 164: return(164);
  case 165: return(165);
  case 166: return(166);
  case 167: return(167);
  case 168: return(168);
  case 169: return(169);
  case 170: return(170);
  case 171: return(171);
  case 172: return(172);
  case 173: return(173);
  case 174: return(174);
  case 175: return(175);
  case 176: return(176);
  case 177: return(177);
  case 178: return(178);
  case 179: return(179);
  case 180: return(180);
  case 181: return(181);
  case 182: return(182);
  case 183: return(183);
  case 184: return(184);
  case 185: return(185);
  case 186: return(186);
  case 187: return(187);
  case 188: return(188);
  case 189: return(189);
  case 190: return(190);
  case 191: return(191);
  case 192: return(192);
  case 193: return(193);
  case 194: return(194);
  case 195: return(195);
  case 196: return(196);
  case 197: return(197);
  case 198: return(198);
  case 199: return(199);
  case 200: return(200);
  case 201: return(201);
  case 202: return(202);
  case 203: return(203);
  case 204: return(204);
  case 205: return(205);
  case 206: return(206);
  case 207: return(207);
  case 208: return(208);
  case 209: return(209);
  case 210: return(210);
  case 211: return(211);
  case 212: return(212);
  case 213: return(213);
  case 214: return(214);
  case 215: return(215);
  case 216: return(216);
  case 217: return(217);
  case 218: return(218);
  case 219: return(219);
  case 220: return(220);
  case 221: return(221);
  case 222: return(222);
  case 223: return(223);
  case 224: return(224);
  case 225: return(225);
  case 226: return(226);
  case 227: return(227);
  case 228: return(228);
  case 229: return(229);
  case 230: return(230);
  case 231: return(231);
  case 232: return(232);
  case 233: return(233);
  case 234: return(234);
  case 235: return(235);
  case 236: return(236);
  case 237: return(237);
  case 238: return(238);
  case 239: return(239);
  case 240: return(240);
  case 241: return(241);
  case 242: return(242);
  case 243: return(243);
  case 244: return(244);
  case 245: return(245);
  case 246: return(246);
  case 247: return(247);
  case 248: return(248);
  case 249: return(249);
  case 250: return(250);
  case 251: return(251);
  case 252: return(252);
  case 253: return(253);
  case 254: return(254);
  case 255: return(255);
  }
}

void user_memcpy2(unsigned char* dest, 
                  unsigned char *src, size_t n) {
  while (n > 0)  {		
    *dest = control_flow_copy(*src);
    src += 1;
    dest += 1;
    n -= 1;
  }
}
int main() {
  int *p = &x;
  int *q;
  user_memcpy2((unsigned char*)&q, (unsigned char*)&p, 
              sizeof(p));
  *q = 11; // is this free of undefined behaviour?
  printf("*p=%d  *q=%d\n",*p,*q);
}