|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
I have a rather interesting code with 3 input variables that produce
result (this is a decoder and written by unknown author). I have to get cd variable by konwing cl, fm and result of the function... is this possible? Code: #define MAKE_TAG_ID( cl, fm, cd)\ ((((UL)(cl)) << ((TB -1) * 8)) | (((UL)(fm)) << ((TB -1) * 8)) | (MAKE_TAG_ID_CODE (((UL)(cd))))) And this is related code: #define MAKE_TAG_ID_CODE(cd)\ ( (cd < 31) ? (MAKE_TAG_ID_CODE1 (cd)):\ ((cd < 128)? (MAKE_TAG_ID_CODE2 (cd)):\ ((cd < 16384)? (MAKE_TAG_ID_CODE3 (cd)):\ (MAKE_TAG_ID_CODE4 (cd))))) #define MAKE_TAG_ID_CODE1(cd) (cd << ((TB -1) * 8)) #define MAKE_TAG_ID_CODE2(cd) ((31 << ((TB -1) * 8)) | (cd << ((TB-2) * 8))) #define MAKE_TAG_ID_CODE3(cd) ((31 << ((TB -1) * 8))\ | ((cd & 0x3f80) << 9)\ | ( 0x0080 << ((TB-2) * 8))\ | ((cd & 0x007F) << ((TB-3)* 8))) #define MAKE_TAG_ID_CODE4(cd) ((31 << ((TB -1) * 8))\ | ((cd & 0x1fc000) << 2)\ | ( 0x0080 << ((TB-2) * 8))\ | ((cd & 0x3f80) << 1)\ | ( 0x0080 << ((TB-3) * 8))\ | ((cd & 0x007F) << ((TB-4)*8))) Thanx for any |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
In article <dd38f620-5d5d-482b-8f35-d75b28036f7e@q21g2000hsa.googlegroups.com>,
Mrki [MCAD] <zeljko.markic@gmail.com> wrote: >I have a rather interesting code with 3 input variables that produce >result (this is a decoder and written by unknown author). >I have to get cd variable by konwing cl, fm and result of the >function... >is this possible? Not with that code, no. Your Subject heading refers to 'xor', but there are no xor operations in the code you show, only bitwise or. >Code: >#define MAKE_TAG_ID( cl, fm, cd)\ >((((UL)(cl)) << ((TB -1) * 8)) | (((UL)(fm)) << ((TB -1) * 8)) | >(MAKE_TAG_ID_CODE (((UL)(cd))))) >And this is related code: >#define MAKE_TAG_ID_CODE(cd)\ >( (cd < 31) ? (MAKE_TAG_ID_CODE1 (cd)):\ >((cd < 128)? (MAKE_TAG_ID_CODE2 (cd)):\ >((cd < 16384)? (MAKE_TAG_ID_CODE3 (cd)):\ >(MAKE_TAG_ID_CODE4 (cd))))) >#define MAKE_TAG_ID_CODE1(cd) (cd << ((TB -1) * 8)) Consider the case of cd < 31. In that case, MAKE_TAG_ID_CODE1 is used, the result of which will be (cd << ((TB -1) * 8)) . That will be inclusive-or'd with (((UL)(cl)) << ((TB -1) * 8)) and with (((UL)(fm)) << ((TB -1) * 8)) . Notice that all three parts are left-shifted by the same amount, so the "interesting" part of the value will be cl | fm | cd Now in any bit position where cl | fm is 1, you cannot tell the difference between cl | fm and cl | fm | cd because 1 bitwise or'd with anything else is still 1 . Thus, you cannot uniquely calculate cd knowing cl, fm, and the result of the function -- not unless you have further information to know that the bottom five bits of cl and fm are always 0. -- "I was very young in those days, but I was also rather dim." -- Christopher Priest |
|
![]() |
| Outils de la discussion | |
|
|