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がやっていることですが、最初の呼び出しが正しかったので余分に混乱しています。それが2番目に混乱することにします。それはちょうど本当に悪いもののように思えます。構造体を念頭に合わせて作られた、とos_lock
は+で0x338です。
私はそれを停止するために、その構造体の周りに#pragma pack(8)
を投げることができますが、かなりの数の他の場所で起こっているようだ、停止する必要があります:)私はVS2015がこのランダムであると想像することはできませんので、私は何かすることができなければなりません。