簡體   English   中英

如何找到文件的物理地址?

[英]How can I find the physical address of a file?

我在Windows 7-64 操作系統上使用GoAsm匯編器 ,我將問您幾個(不是很愚蠢的)問題。

第一個問題:

如何找到文件物理地址 假設文件“ Text.txt”位於我的C:\\分區的根目錄下。 有沒有辦法獲取此文件所在的確切內存地址?

第二個問題:

是否可以調用一個例程,就像我調用C函數一樣?

(即:考慮一個C函數“ WriteToScreen”,是否可以具有相同的函數,但是以匯編器格式表示,這意味着無需使用高級調用來完成該工作?

第三個問題:

網上是否有一些GoAsm包含文件,其中包含有用的例程,例如(移動,復制,編輯,擦除)命令? 我首先想到了ms-dos中斷,但是在不使程序崩潰的情況下,我無法使它們工作。 我猜它只是與Windows OS不兼容,即使命令提示符的行為類似於ms-dos ...?

第四個問題:

我已經從不同的來源和我自己那里聽說過,NASM在Win7 x64上工作得很糟糕,這是真的,還是我做錯了方法?

1從邏輯角度看,硬盤驅動器可以看作是一系列“塊”(更常見的名稱是扇區)。 可以忽略這些塊在磁盤上的物理組織方式,但是驅動程序當然必須知道如何獲取數據,盡管您向現代高清驅動程序發送了“高級”命令,據您所知,這些命令並不密切相關數據的物理位置(您可以說“讀取塊123”,但沒有外部證據表明該塊位於何處)。

但是,通過這種方式,您可以用數字“命名”一個塊,例如說塊0是MBR。 每個塊包含幾個字節(512、1024 ...)。 並非所有使用的塊都包含文件的實際數據,實際上,存在各種類型的元信息,具體取決於文件系統,甚至與hd的“結構”(我的意思是分區)有關。

位於hd上的文件不會自動加載到內存中,因此它沒有內存地址。 一旦閱讀完,如果不是全部,當然會將其中的一部分復制到您提供的內存中,這不是文件的固有屬性。 (文件系統檢索屬於該文件的塊,並像我們用來查看它們一樣“顯示”它們,作為文件的單個“單元”)

總結:文件沒有內存地址。 物理地址可以是保存文件數據(和元數據,如inodes )的一組塊,也可以只是第一個塊(但如果數據塊為N,則N + 1不能屬於同一文件-塊無需彼此相鄰)。 要了解它們,您必須分析使用的文件系統的結構。 我不知道是否有API可以輕松地檢索它們,但在最壞的情況下,您可以分析文件系統的源代碼...祝您好運!

2 C函數被轉換為匯編。 如果遵守C調用約定,則可以直接在匯編中編寫“ C函數”。 嘗試閱讀適用於x86。

3您可以從asm調用Windows API。 忘了MS-DOS,MS-DOS已死,MS-DOS不是Windows,cmd是一種“仿真” ...的確不,不是仿真,而只是類似於一個MS-DOS用戶的命令行界面被用來。 但這並不完全相同,即沒有可以使用的MS-DOS系統中斷。 Iczelion的組裝教程雖然很舊,但可能是一個有趣的資源。 (如果鏈接過期,請嘗試使用Wayback機器

4我不擁有Win7,也從未在Windows上安裝過nasm,所以我無能為力。

對於第一個問題,只需將文件拖到瀏覽器的地址欄中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM