1
在Visual Studio 2015中使用内核驱动程序项目。我注意到这种事情正在发生。VS2015指针不断变化,对齐?
dprintf("os %p; os_lock %p\n", os, &os->os_lock);
mutex_init(&os->os_lock);
mutex_enter(&os->os_lock);
void mutex_init(kmutex_t *mp) {
dprintf("%s is %p\n", __func__, mp);
...
void mutex_enter(kmutex_t *mp) {
dprintf("%s is %p\n", __func__, mp);
...
os 0xffffa08b29041ac0; os_lock 0xffffa08b29041df8
mutex_init is 0xffffa08b29041df8
mutex_enter is 0xffffa08b29041df0 <---
那么发生了什么?当然,这是VS2015出于某种原因正在做的一个对齐的事情,但是由于第一次通话是正确的,所以它更加令人困惑,然后它决定在第二次通话中搞砸了。这似乎是一件非常糟糕的事情。该结构是在考虑到对齐的情况下制作的,并且os_lock
是+ 0x338英寸。
我可以围绕该结构抛出#pragma pack(8)
来停止它,但它似乎发生在其他几个地方,并且它需要停止:)我无法想象VS2015会是这个随机的,所以它必须是我设法做的事情。