指標錯位導致對FSD誤判

2022-07-16 17:51:17 字數 1062 閱讀 1802

fsd管理器實現中有如下**

dword cstore::opendisk()

else else    

}   

}}  

if (m_hdisk != invalid_handle_value)

}if (dwerror == error_success)

}   

debugmsg( zone_init, (l"fsdmgr!cstore::opendisk(0x%08x) deviceinfo class(0x%08x) flags(0x%08x) type(0x%08x) profile(%s)\r\n",

this,

m_sdi.dwdeviceclass,

m_sdi.dwdeviceflags,

m_sdi.dwdevicetype,

m_sdi.szprofile));

setlasterror( error_success);   

dwerror = ::deviceiocontrol(m_hdisk, ioctl_disk_get_storageid, null, 0,&storageid, sizeof(storage_identification), &dwret, null);

if (error_insufficient_buffer == getlasterror())

}return dwerror;

}ioctl_disk_get_storageid 返回的內容除去storage_identification結構外還有附加的資訊,這樣就會執行後面的條件。我的驅動在**執行時竟然會影響到dwerror位,導致程式的返回內容不正確。故意由於storageid和dwerror都為上述函式的棧空間內,自己寫的ioctl訪問指標時錯位,導致

opendisk區域性變數受影響所導致。

察看反編譯結果後發現後發現,兩個的變數的指標位置剛好相鄰

dwerror -> 0x040ef83c

storageid->0x040ef82c

在沒有檢查傳入buffer長度的情況下直接寫入了跟隨的資訊,導致opendisk出錯。

inline block導致的錯位問題詳解

如圖 想要讓黃 紅兩個盒子水平排列,方法有很多,有position定位,float浮動,實在不行還有彈性盒display flex 還有一種方法就是display inline block 將其變成行內塊元素,便可以水平排列,但是問題就出現在了這裡,當我們設定display inline block...

NCF 資料庫錯位導致站點訪問不了

場景發生在,我們本地使用ncf開發了乙個應用,前提是應用使用了redis,如果沒有使用redis,則不會遇到以下的問題,當要遷移到線上或者是遷移到別的地方的時候 這樣的情況會出現2個問題 1.直接報錯,如下圖所示 2.沒有報錯,正常連線了,但是線上環境讀取的卻是本地測試環境的資料 這個問題不好排查,...

js操作元素導致元素錯位和大小改變

使用js迴圈的方式批量控制元素的大小時結果往往不盡如人意。我總結了一條規律 在乙個迴圈體內不可以同時存在一下兩種操作,否則容易導致元素錯位或大小改變 1.對元素的offsetwidth offsetheight等與大小 位置有關的屬性的訪問 2.對元素的移動 改變大小 包括可能間接導致元素移動和改變...