前几天调试eboot时碰到了个见鬼的事。程序里定义了个BOOLEAN的全局变量g_DownloadImage。程序跑了几遍,判断其值时总是不对。后来偶然注意到在一个文件里的声明写成了extern BOOL g_DownloadImage。有问题吗?随手改回了BOOLEAN。程序跑对了!
天啊,咋回事?
加了个打印,却看到g_DownloadImage的地址居然是奇数。古怪。数据对齐的问题?
翻了翻MSDN,呵呵,
typedef int BOOL;
typedef BYTE BOOLEAN;俺承认学艺不精,从来只知道TRUE、FALSE,却没注意过BOOLEAN、BOOL还是有点不同的。
作者在调试eboot过程中遇到一个有趣的问题:全局变量g_DownloadImage被声明为BOOLEAN类型,但在某个文件中误写为extern BOOL类型导致程序运行错误。通过添加打印语句发现该变量的地址为奇数,疑似数据对齐问题。最终查明原因在于BOOL和BOOLEAN在底层实现上有所不同,BOOL实际上typedef为int,而BOOLEAN则typedef为BYTE。
7970

被折叠的 条评论
为什么被折叠?



