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

Windows 7 如何找到文件的物理地址?,windows-7,64-bit,assembly,Windows 7,64 Bit,Assembly,我在Windows7-64位操作系统上使用GoAsm汇编程序,我会问你一些不那么愚蠢的问题 第一个问题: 如何找到文件的物理地址? 假设Text.txt文件位于C:\分区的根目录下。 有没有办法得到这个文件所在的确切内存地址 第二个问题: 是否可以调用一个与调用C函数类似的例程 即:考虑一个C函数写文件,有可能具有相同的功能,但在汇编程序格式中,这意味着不需要使用高级调用来完成这项工作吗? 第三个问题: 网络上是否有一些包含GoAsm文件的有用例程,如移动、复制、编辑、擦除命令?我首先想到了ms

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

第一个问题:

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

第二个问题:

是否可以调用一个与调用C函数类似的例程

即:考虑一个C函数写文件,有可能具有相同的功能,但在汇编程序格式中,这意味着不需要使用高级调用来完成这项工作吗? 第三个问题:

网络上是否有一些包含GoAsm文件的有用例程,如移动、复制、编辑、擦除命令?我首先想到了ms dos中断,但我无法在不破坏程序的情况下让它们工作。我猜它只是不兼容Windows操作系统,即使命令提示符的行为像ms dos

第四个问题:

我从不同的渠道和我自己那里听说NASM在Win7 x64上工作得很糟糕,这是真的,还是我做得不对 从逻辑的角度来看,硬盘驱动器可以看作是一系列块,更常见的名称是扇区。这些数据块在磁盘上的物理组织方式可以忽略不计,但驱动程序必须知道如何获取数据,当然,尽管您向现代hd驱动程序发送高级命令,据您所知,这些命令与数据的物理位置关系不大,您可以说读取数据块123,但是没有外部证据表明那座大楼住在哪里

但是,通过这种方式,您可以用数字命名一个块,例如,块0就是MBR。每个块包含多个字节512、1024。。。。并非所有使用的块都包含文件的实际数据,事实上存在任何种类的元信息,这取决于文件系统,甚至与hd的结构(我的意思是分区)有关

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

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

二, C函数被转换成汇编语言。如果遵守C调用约定,可以直接在汇编中编写C函数。请尝试阅读并使用x86

三, 您可以从asm调用windows API。忘记MS-DOS,MS-DOS已经死了,MS-DOS不是Windows,cmd是一种模拟。。。事实上,不是仿真,只是一个命令行界面,类似于MS-DOS用户使用的界面。但这并不完全相同,也就是说,没有可以使用的MS-DOS系统中断,虽然很老,但这可能是一个有趣的资源。如果链接过期,请尝试使用

四,
我没有Win7,也从未在windows上安装过nasm,所以我不能说任何关于它的事情。

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

文件没有内存地址。它们位于磁盘上具有位置(例如,磁盘块编号)的位置。事实上,你并不清楚这一点,这表明你最好先花时间学习计算机体系结构和操作系统,然后再花更多的精力在汇编代码上。但我不同意你的说法,尽管我可能错了。如果我在硬盘的随机部分写入一个字节,这个字节显然放在一个扇区中,应该有它的地址来定位字节所在的位置。我的意思是,如果我想知道Foo在条的位置,我不会用铅笔在磁盘表面写数据-。当它都是数字的时候,为什么它不能像ROM和RAM那样工作呢?我们都知道CPU只能识别二进制,二进制表示法用于指定二进制地址。@Chunk Norris:不要混淆计算机内部发生的事情以及文件数据最终到达的位置。你的邮箱有地址,它可以收集信件。但是在邮局里有大量你从未见过的信件被机械地洗牌,在邮政总局里发生这种洗牌的每个地方都有一个地址,如果没有别的,那就是它的GPS坐标。但是这两种地址是完全不相关的。我回到我的评论:你不知道
在你花更多的时间遵循你最初的思路之前,你应该去阅读更多关于计算机和操作系统架构的知识。这正好证明了一点,那就是,在尝试组装之前,你应该去学习基本的计算机架构。只是因为有些东西是可寻址的,而大多数东西是可寻址的!这并不意味着地址是数字或随机访问的。要读取磁盘,您需要向硬盘发送命令,将数据复制到内存中,这些指令具有特权,因此您必须询问操作系统。内存也是这样:您必须发出命令将数据复制到我正在简化的寄存器中,但这些指令没有特权。网页也可以寻址,但它们没有内存位置。指向online.fr的链接对我无效DNS未解析。另一个汇编程序教程站点是:。此外,对于2,如果汇编程序对象文件包含在C项目中,它应该能够找到汇编程序例程,就像它是任何其他C例程一样。当然,根据所使用的OS/compiler/assembler/IDE的不同,这一切都会略有不同。链接似乎消失了。我要改变它;你的链接不是另一个汇编教程,但它正是iczelion的一个。对于2,重点是在asm代码中使用C调用约定,而不是汇编程序例程的作用域/可见性。