我正在使用英特爾酷睿2雙核CPU和Windows 7操作系統。我聽說每個設備都映射到內存中,如果有的話我怎樣才能得到連接到我的系統的鍵盤的地址?我的意圖是將鍵盤輸入讀入一個volatile變量。那可能嗎 ?如何找出鍵盤的地址
回答
這將是您的鍵盤連接到USB控制器的地址。但是,知道這將不會讓你直接訪問鍵盤,因爲:
它是一個USB控制器,而不是鍵盤本身。鍵盤將消息發送到USB控制器,而USB控制器又被OS解釋爲「鍵盤事件」。
操作系統保護硬件地址,這樣你只能通過適當的設備驅動程序訪問它們。
在過去,它用來甚至可以不是存儲器,鍵盤變爲一個「鍵盤控制器」芯片,其在I/O端口60和64(或60/61出現在非常原始IBM PC和XT PC)。儘管如此,在現代操作系統中,如果沒有設備驅動程序,您無法「窺視」或「戳穿」鍵盤。
啊,'偷看'!美好的過去! :-) –
@Mats Petersson:我只是想通過執行一個程序來測試一個volatile變量。有沒有辦法讓我可以得到一個原始的可訪問地址(其內容隨時間變化)。 –
@Mats Petersson:我如何獲得USB控制器的地址? –
我不知道Windows 7操作系統,但我敢肯定它不會讓你直接訪問鍵盤設備,如果只是出於安全原因。
鍵盤是一個標準輸入設備和scanf
可用於從鍵盤來閱讀。
這個答案有什麼問題? –
volatile
在內核空間大多被使用。如果你想看到這個關鍵字的行動,最簡單的方法是編寫一個簡單的Linux內核模塊,它讀取一些隨機的CPU周邊寄存器。
UPDATE
即使volatile
經常被用來讀取硬件寄存器中,例如,微控制器固件,它不是唯一的用例。在下面的一些評論之後,很明顯的是,其他一些真實場景也是可能的,例如內存映射文件。 「內存」的內容可能會發生變化,程序不會看到任何寫入內容。如果不使用volatile
,編譯器會相應地優化讀取操作,導致返回/處理錯誤的數據。
有沒有可能在Windows中讀取CPU周邊寄存器 Os? –
不,除非你正在編寫驅動程序,我希望你明白一個簡單的事實:現在每個用戶進程都在自己的地址空間中運行,並且無法訪問系統內存? –
如何訪問Linux CPU寄存器? –
我不知道如何訪問MS Windows中的受限內存區域。在Linux中,您可以使用ioperm
或iopl
來獲得I/O端口特權。
鍵盤映射到0x60狀態寄存器和0x64輸入緩衝存儲器位置。你可以得到如何閱讀,並直接從鍵盤寫的東西一個很好的概述:http://www.brokenthorn.com/Resources/OSDev19.html
而且你可能想看看Linux的鍵盤驅動程序源代碼。
但是,如果您有計劃使用這些端口直接讀取鍵盤中輸入的字符,就像您在getchar
或scanf
等中那樣,那麼這是不正確的。使用這些端口,您需要編寫自己的鍵盤驅動程序,以解碼通過這些端口發送的任何內容,然後將它們映射到要按的字符,小心或切換鍵等等。
So code like const volatile char * keyBoardInput =(const volatile char *)0x60;將按鍵讀入? –
不,您需要使用'in'和'out'彙編指令從端口讀取。否則,您可以使用Linux中提供的'inb'和'outb'宏。 – phoxis
在哪個頭文件中我可以找到inb和outb宏? –
- 1. 如何找出ret地址
- 2. 如何找出「正確的」IP地址?
- 3. 找出IP地址?
- 4. 當從地址找到經緯度時,如何給出地址?
- 5. 找出鍵盤佈局何時更改
- 6. 如何當鍵盤出現
- 7. 如何找出按下鍵盤向下箭頭鍵,編程
- 8. 如何從Go鍵盤輸入IP地址?
- 9. 虛擬地址如何轉換爲磁盤地址?
- 10. 如何找出鍵盤第一次打開的時間? iphone
- 11. 如何找出iOS8上使用的當前鍵盤?
- 12. 如何從ftp地址找到網址
- 13. 如何幹淨地殺死Ubuntu的板載鍵盤板載鍵盤按鍵
- 14. 如何找出當所有地址已被地理編碼
- 15. 如何讓我的應用程序中的電子郵件地址的鍵盤?
- 16. 如何查找鍵盤視圖iOS6
- 17. GetAsyncKeyState:如何映射到本地鍵盤?
- 18. 如何找出是否顯示虛擬鍵盤BB Cascades
- 19. 如何查找IP地址是否是鏈接本地地址
- 20. 如何快速找到IP地址範圍內的IP地址?
- 21. 鍵盤按鍵本地化
- 22. 尋找鍵盤API
- 23. 找出Docker容器中的IP地址
- 24. 找出內存地址指向的值
- 25. 如何找到給定地址的ptep?
- 26. 如何找到EXC_BAD_ACCESS異常的地址?
- 27. 如何查找變量的地址?
- 28. JavaScript的:如何查找IP地址
- 29. 如何找到包含頭的地址
- 30. 如何查找dnsserver的ip地址?
您可以使用scanf語句將從標準輸入輸入的數據讀入變量。 –
簡答:是的,您可以將鍵盤輸入讀入變量。儘管你的問題的其餘部分沒有意義。 1.>爲什麼你想要鍵盤的映射內存的地址?你正在編寫一個操作系統或驅動程序?爲什麼你的變量是volatile? –
@Santhosh Pai:是的,我可以做到這一點,但我想知道更多關於揮發性變量。是否可以直接從對應於鍵盤的地址讀取? –