12.8 Disguising Boolean Values

12.8.1 Problem

Variables representing boolean values are difficult to disguise because they usually compile to comparisons with 0 or 1.

12.8.2 Solution

Disguising boolean values can be tackled effectively at the assembly-language level by replacing simple test-and-branch code with more complex branching (see Recipe 12.3). Alternatively, the default boolean test can be replaced with an addition.

12.8.3 Discussion

By replacing the default boolean test usually a sub or an and instruction with an addition, the purpose of the variable becomes unclear. Rather than implying a yes or no decision, the variable appears to represent two related values:

typedef struct {   char x;   char y; } spc_bool_t;     #define SPC_TEST_BOOL(b)      ((b).x + (b).y) #define SPC_SET_BOOL_TRUE(b)  do { (b).x = 1;  (b).y = 0; } while (0) #define SPC_SET_BOOL_FALSE(b) do { (b).x = -10;  (b).y = 10; } while (0)

The SPC_TEST_BOOL macro can be used in conditional expressions:

spc_bool_t b;     SPC_SET_BOOL_TRUE(b); if (SPC_TEST_BOOL(b)) printf("true!\n"); else printf("false!\n");

12.8.4 See Also

Recipe 12.3



Secure Programming Cookbook for C and C++
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2005
Pages: 266

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net