例题
1、进制转换
负数的16进制要用补码来表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| int __cdecl main(int argc, const char **argv, const char **envp) { size_t v3; int v5; unsigned int i; int v7; int v8; int v9; int v10; int v11; int v12; int v13; int v14; int v15; unsigned __int64 v16; int v17[8]; char s[5]; char v19[107]; char dest[104]; unsigned __int64 v21;
v21 = __readfsqword(0x28u); v7 = 80; v8 = 64227; v9 = 226312059; v10 = -1540056586; v11 = 5; v12 = 16; v13 = 3833; v5 = 0; puts("plz input the key:"); __isoc99_scanf("%s", s); v3 = strlen(s); strncpy(dest, v19, v3 - 6); dest[strlen(s) - 6] = 0; __isoc99_sscanf(dest, "%x", &v5); v17[0] = v7; v17[1] = v8; v17[2] = v9; v17[3] = v10; v17[4] = (v11 << 12) + v12; v17[5] = v13; v17[6] = v5; v16 = 0LL; for ( i = 0; i <= 6; ++i ) { for ( v16 += (unsigned int)v17[i]; v16 > 0xFFFF; v16 = v15 + (unsigned int)(unsigned __int16)v16 ) { v14 = (unsigned __int16)v16; v15 = v16 >> 16; } } if ( v16 == 0xFFFF ) puts("OK"); else puts("Error"); return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| v7 = 80 v8 = 64227 v9 = 226312059 v10 = -1540056586 v11 = 5 v12 = 16 v13 = 3833 for x in range(0xffff): v17 = [v7, v8, v9,0xA43499F6, (v11 << 12) + v12, v13, x] v16 = 0 for i in range(7): v16 += v17[i] while v16 > 0xffff: v15 = v16 >> 16 v16 = (v15 + (v16 & 0xffff)) & 0xffffffff if v16 == 0xffff: print(hex(x))
|
更新: 2024-07-19 09:58:00
原文: https://www.yuque.com/chaye-apqbl/vsc85q/dw6mf4rvefpa7omi