bjwf:
[技术帖]这段程序我觉得有句话有问题,你们觉得呢
[阅读: 606] 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)));
这句话本身的写法也很令人费解.完全有可能导致内存访问越界,或发生地址不对齐的字访问.