windows 7-如何查找文件的物理地址



我在Windows 7-64位操作系统上使用GoAsm汇编程序,我会问你一些(不那么愚蠢)问题。

第一个问题:

如何查找文件的物理地址?假设文件"Text.txt"位于C:\分区的根目录下。有没有办法得到这个文件所在的确切内存地址?

第二个问题:

是否可以调用一个例程,就像我调用C函数一样?

(例如:考虑一个C函数"WriteToScreen",是否有可能拥有相同的函数,但采用汇编格式,这意味着不需要使用高级调用来完成这项工作?

第三个问题:

网络上是否有一些GoAsm的包含文件,其中包含有用的例程,如(移动、复制、编辑、擦除)命令?我第一次想到ms-dos中断,但我无法在不破坏程序的情况下让它们工作。我想它只是与Windows操作系统不兼容,尽管命令提示符的行为类似于ms-dos

第四个问题:

我从不同的来源和我自己那里听说,NASM在Win7 x64上运行得很糟糕,这是真的,还是我做得不对?

1从逻辑角度来看,硬盘驱动器可以被视为一系列"块"(更常见的名称是扇区)。这些块在磁盘上的物理组织方式可以忽略,但驱动程序必须知道如何获取数据,当然,尽管你向现代高清驱动程序发送"高级"命令,据你所知,这些命令与数据的物理位置没有密切关系(你可以说"读取块123",但没有外部证据表明该块位于何处)。

然而,通过这种方式,你可以用一个数字"命名"一个块,并说例如块0就是MBR。每个块包含几个字节(5121024…)。并不是所有使用的块都包含文件的实际数据,事实上,根据文件系统的不同,甚至与硬盘的"结构"(我的意思是分区)有关,都有任何类型的元信息。

硬盘上的文件不会自动加载到内存中,因此它没有内存地址。一旦你读了它,它的一部分(如果不是全部的话)当然会被复制到你给出的内存中,这不是文件的固有属性。(文件系统检索属于文件的块,并将它们"显示"为我们习惯于看到的单个"单元",即文件)

总结:文件没有内存地址。物理地址可以是保存文件数据(和元数据,如索引节点)的块集,也可以只是第一个块(但如果数据块是N,N+1就不可能属于同一个文件——这些块不需要一个挨着一个)。要了解它们,您必须分析您使用的文件系统的结构。我不知道是否有API可以轻松地检索它们,但在最坏的情况下,您可以分析文件系统的源代码。。。祝你好运

2C函数被翻译成汇编。如果您尊重C调用约定,您可以直接在汇编中编写"C函数"。请尝试阅读本文和x86的相关内容。

3您可以从asm调用windows API。忘记MS-DOS,MS-DOS死了,MS-DOS不是Windows,cmd是一种"模拟"。。。确实不是,不是模拟,只是一个命令行界面,类似于MS-DOS用户使用的界面。但它并不完全相同,即没有MS-DOS系统中断可供使用。Iczelion的组装教程虽然很老,但可能是一个有趣的资源。(如果链接过期,请尝试使用折返机)

4我没有Win7,也从来没有在windows上安装过nasm,所以我什么都不能说。

对于第一个问题,只需将文件拖动到浏览器的地址栏中

最新更新