探測硬碟是否存在

2021-09-29 17:34:16 字數 1121 閱讀 3998

一般認為這是bios幹的事情,不用自己取處理。好吧,我沒辦法在32位保護模式下使用bios的int 13h,所以我只能寫自己的硬碟驅動。

另乙個問題是,bios並不提供具體的硬碟埠資訊,也不提供硬碟具體連線在那個埠上,如果要寫驅動程式,又必須獲得這些引數。

在ata標準中好像沒有,其實是因為文件太長,而且是英文的,所以沒有找得很仔細,也許在裡面有提到。

然後就是一大堆在windows或者linux下用api來獲得硬碟資訊的資料。

而我的需求是:在裸機的狀態下,相當於沒有作業系統、沒有bios的情況下來探測硬碟

折騰了一輪下來,發現沒什麼標準方法,只好用最笨的方法了,遍歷所有標準埠,然後非標準埠呢?擴充套件埠呢?好吧,只能留到以後在處理了。所以,我的系統目前只能從標準的ata硬碟埠啟動了,至於為什麼不探測sata或者其他的,主要是因為hyper-v沒有提供這個的模擬裝置,而且ata還沒整明白,就一大堆一起搞,會把自己搞懵逼的,所以就先探測ata硬碟了。

其實這個只對ide硬碟有效,從中獲得基本的引數。可以利用這個引數中初步判斷硬碟是否存在。

如果identify命令執行成功,說明硬碟可能存在,需要進行下一步的確認。比如我是從硬碟引數中獲取硬碟的容量,如果容量為不為0,則初步認為硬碟是存在的。如果硬碟容量為0,我就認為硬碟不存在了,因為乙個容量為0的硬碟,存在也沒有意義,當然,沒有裝入碟片的光碟機,容量有可能是0,不過我現在還沒處理光碟機,就當作沒有了。

如果identify命令執行失敗,那可以肯定對應埠沒有裝置。

在獲得硬碟容量後,我覺得還不能就立即確認硬碟存在,所以我就採用讀最後乙個扇區的方式進行檢驗。如果讀最後乙個扇區成功,我就認為硬碟存在。

為什麼選擇讀最後乙個扇區呢?這有兩個作用。

第乙個作用當然是確認硬碟存在。因為硬碟正確響應了讀操作,那就說明硬碟存在了。當然不能說硬碟沒有正確響應就說硬碟不存在,所以可以用reset命令復位後重試幾次,如果都沒有成功,那就當作硬碟不存在了。

另乙個作用是確認容量,也就是確認引數給出的硬碟容量是有效的,注意啊,我是用了有效這個詞,並不是說引數正確啊。比如,有人修改了硬碟引數,如果把容量改小了,硬碟還是可以正確響應的,這個情況下,容量就是有效,而不是正確。如果把硬碟容量改大了呢?超出了硬碟的定址範圍,那自然是讀失敗了。這個時候,即使硬碟是存在的,由於容量錯了,也必須當作硬碟不存在。

JS探測內網是否存在bash漏洞,反彈shell

來t00ls幾天啦,也沒時間寫原創。本人首發土司啦。最近看到老外一篇文章,覺得很不錯。測試了一下把這個東西把過程分享給大夥,希望大夥不要踩,忙完這幾天就寫原創 呼叫乙個js,掃瞄內網是否存在bash漏洞,然後 shell回來的乙個小東西。搞apt應該用得到啦。測試過程 老外發的乙個poc我內網搭建測...

SQL判斷是否存在

判斷資料庫是否存在 if exists select from master.sysdatabases where name n 庫名 print exists else print not exists 判斷要建立的表名是否存在 if exists select from dbo.sysobjec...

檢查文件是否存在

如果只想檢查乙個文件是否存在 根本不想關心內容 那麼用 head方法來代替get方法。head請求沒有返回體,只返回乙個 http 請求報頭 i 如果文件存在,elasticsearch 將返回乙個200 ok的狀態碼 1.1 200ok content type text plain charse...