能力值:
( LV7,RANK:140 )
|
-
-
2 楼
你没有讲清楚。 首先你out[0] = ((in[i] << i) & 0x3fffffff) | (in[i] >> (32 - i)); i+=4;已经写出来了,那么你最终目的是要得到什么? 其次你说了小尾,那么in的0x79D9BED4,0x0000EB52以及out的0x197952EB,0x000352FB在内存里是怎么排布的? 是79 d9 be d4 00 00 eb 52还是52 eb 00 00 d4 be d9 79? 最后,前面声明了in[2],而后面i+4,那么in[i]会溢出,不清楚你的意思
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
@yeyeshun 对的,这个算法要的就是“那么in[i]会溢出”,才能得到和反汇编一样的out结果,小弟重新排版下数据 下面都是小尾CPU数组的数据 原始反汇编数据是按照char * 来的,但是它移位又是把char * 转为int 来运算的 unsigned char in [0x0008] = { 0xeb, 0x52, 0x79, 0x19, 0xfb, 0x52, 0x03, 0x00}; unsigned char out [0x0008] = { 0xd4, 0xbe, 0xd9, 0x79, 0x52, 0xeb, 0x00, 0x00}; //out[0] = ((in[i] << i) & 0x3fffffff) | (in[i] >> (32 - i)); i+=4;
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
下面的代码得到一半的正确结果,后办部分实在搞不来了。。。。
int mac_out_int[2] = {}; int m[2] = { 0 }; int max[2] = { 0 };
int *largest_right_cyclic_shift(int *n) { memcpy(m, n, 8); memcpy(max, n, 8); for (size_t p = 0; p < 1; p++) { for (int i = 0; i < 17; i += 4) { m[0] = ((n[p] << i) & 0x3fffffff) | (max[p] >> (32 - i)); //if (i==8) //{ // max[0] = m[2]; // mac_out_int[1] = m[0]<< 4 & 0x3FFFFFFF; // mac_out_int[1] = mac_out_int[1] >> 26 & 0x3FFFFFFF; //} if (m[p] <= max[p]) { max[p] = m[p+1]; // mac_out_int[1] = m[0];// ((max[0] << i) & 0x3fffffff) | (n[1] >> (32 - i)); } } } return m; //0x197952eb ok,循环到这里,这个正确得到 //0x000352fb 这里就不会搞了 } void tlx_mac() { unsigned int out_mac_int[2] = { 0 }; kGe::cpu_work_model::Pchar_2_int(local_mac, out_mac_int); //local_mac :char * in auto out = largest_right_cyclic_shift((int *)out_mac_int);//out_mac_int:char *in转大端数据传参进入上面的循环 }
|
能力值:
( LV7,RANK:140 )
|
-
-
5 楼
恕我直言,你描述的这些东西以及你贴的代码,不如直接贴原始算法的汇编码
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
那私信吧,国软,方便留下qq嘛
|
|
|