bjwf:
[技术帖]这段程序我觉得有句话有问题,你们觉得呢
[阅读: 541] 2009-03-13 06:31:26
#define fast_read_memory(size, type, address, dest) \
{ \
u32 _address = address; \
if(((_address >> 24) == 0) && (pc >= 0x4000)) \
{ \
dest = *((type *)((u8 *)&bios_read_protect + (_address & 0x03))); \
} \
...//还有很长,省略了
}
我觉得这句话有问题:
dest = *((type *)((u8 *)&bios_read_protect + (_address & 0x03)));
其中 bios_read_protect 是全局变量,被定义为
u32 bios_read_protect;
fast_read_memory 宏在在程序中被多次调用,调用时的形式有:
fast_read_memory(8, u8, addr, dest)
fast_read_memory(16, u16, addr, dest)
fast_read_memory(32, u32, addr, dest)
我觉得当用16和32调用时有问题.
dest = *((type *)((u8 *)&bios_read_protect + (_address & 0x03)));
这句话本身的写法也很令人费解.完全有可能导致内存访问越界,或发生地址不对齐的字访问.
试图在互联网上划出国界的举动是愚蠢的!!!
把人当成猪羊圈养,草料永远都不够!把人当人待,人有无限的创造力! “人口减少一半,人们两倍富有”的观念为“一种非常糟糕的自甘堕落—这背后的潜台词是,似乎中国人是封闭围栏中的动物,对周围那些自己赖以生存的资源,除了咀嚼,别无办法。”
我的像册:
http://picasaweb.google.com/bjwf2000/
我的主页:
http://bjwf2000.googlepages.com/