Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <bitset>
  5.  
  6. using namespace std;
  7.  
  8. string toBinary(int n)
  9. {
  10. string r;
  11. r = bitset<8>(n).to_string();
  12. return r;
  13. }
  14.  
  15. int get_y(unsigned char tar) {
  16. int rez;
  17. string bin = toBinary(int(tar));
  18. string binrez = "";
  19. for (int i = 0; i < 4; i++)
  20. {
  21. binrez += bin[i];
  22. }
  23. rez = stoi(binrez, nullptr, 2);
  24. return rez;
  25. }
  26.  
  27. int get_x(unsigned char tar) {
  28. int rez;
  29. string bin = toBinary(int(tar));
  30. string binrez = "";
  31. for (int i = 4; i < 8; i++)
  32. {
  33. binrez += bin[i];
  34. }
  35. rez = stoi(binrez, nullptr, 2);
  36. return rez;
  37. }
  38.  
  39.  
  40.  
  41. int main() {
  42. unsigned char regs[16];
  43. char mem[256];
  44. unsigned char inp;
  45. int flag = 0, flag_pab = 0, hm = 0, poz = 0, len, clen = 0;
  46. ifstream prog("decryptor.bin", ios::binary|ios::ate);
  47. ifstream inpf("q1_encr.txt", ios::ate);
  48. ofstream out("rez.txt");
  49. len = inpf.tellg();
  50. hm = prog.tellg();
  51. prog.seekg(0);
  52. inpf.seekg(0);
  53. prog.read((char*)&mem[0], hm);
  54. cout << len << endl;
  55. for (int i = 0; i < hm; i+=2)
  56. {
  57. switch (mem[i])
  58. {
  59. case 0x01: {cout << "0x01" << endl; regs[int(mem[i + 1])]++; }break;
  60. case 0x02: {cout << "0x02" << endl; regs[int(mem[i + 1])]--; }break;
  61. case 0x03: {cout << "0x03" << endl; regs[get_x((mem[i + 1]))] = regs[get_y((mem[i + 1]))]; }break;
  62. case 0x04: {cout << "0x04" << endl; regs[0] = mem[i + 1]; }break;
  63. case 0x05: {cout << "0x05" << endl; regs[int(mem[i + 1])] = int(regs[int(mem[i + 1])]) << 1; }break;
  64. case 0x06: {cout << "0x06" << endl; regs[int(mem[i + 1])] = int(regs[int(mem[i + 1])]) >> 1; }break;
  65. case 0x07: {cout << "0x07" << endl; i = i + int(mem[i + 1])-2; }break;
  66. case 0x08: {cout << "0x08" << endl; if (flag == 1) i = i + int(mem[i + 1])-2; }break;
  67. case 0x09: {cout << "0x09" << endl; if (flag == 0) i = i + int(mem[i + 1])-2; }break;
  68. case 0x0A: {cout << "0x0A" << endl; if (flag_pab == 1) i = i + int(mem[i + 1]-2); }break;
  69. case 0x0B: {cout << "0x0B" << endl; cout << "Baigtas darbas" << endl; i = hm; }break;
  70. case 0x0C: {cout << "0x0C" << endl; regs[get_x((mem[i + 1]))] += int(regs[get_y((mem[i + 1]))]); }break;
  71. case 0x0D: {cout << "0x0D" << endl; regs[get_x((mem[i + 1]))] -= int(regs[get_y((mem[i + 1]))]); }break;
  72. case 0x0E: {cout << "0x0E" << endl; regs[get_x((mem[i + 1]))] ^= int(regs[get_y((mem[i + 1]))]); }break;
  73. case 0x0F: {cout << "0x0F" << endl; regs[get_x((mem[i + 1]))] |= int(regs[get_y((mem[i + 1]))]); }break;
  74. case 0x10: {cout << "0x10" << endl; inpf >> noskipws >> inp; regs[int(mem[i + 1])] = inp; clen++; if (clen == len) flag_pab = 1; }break;
  75. case 0x11: {cout << "0x11" << endl; out << regs[int(mem[i + 1])]; }break;
  76. }
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement