如何在intel x86 Assembly中找到当前日期?

时间:2009-12-07 02:41:33

标签: assembly x86

我需要在Windows上找到以二进制形式查找Intel x86 Assembly的当前日期。我被允许使用Windows程序。

4 个答案:

答案 0 :(得分:6)

如果您被允许使用Win32功能,那么对此的答案将与“我如何在Windows上找到C中的当前日期?”的答案相同。为此,查看GetSystemTime和SystemTimeToFileTime函数(嘿,整齐,现在甚至还有一个GetSystemTimeAsFileTime函数!(自Windows 2000起))。

答案 1 :(得分:4)

不确定这是否在技术上是“Windows”(并且实际上仅适用于Windows的模拟DOS环境,即GVD Hewgill确认的NTVDM),但您可以使用 INT $ 21,AH中的$ 2A ,因为 DOS函数将返回日期。有关详细信息,请参阅此link

答案 2 :(得分:2)

GetSystemTime()返回GMT(也称为UTC);用户看到的时间使用GetLocalTime()。

要知道确切的汇编代码,请在C中编写一个调用,使用/ FA编译(假设是Microsoft编译器)并从列表文件中获取调用序列。如果您不确定调用约定或如何在汇编中引用外部函数名称,可能会有所帮助。

答案 3 :(得分:1)

int 20h int 21h 用于调用DOS例程。这些可以在32位Windows支持的虚拟模式下调用,也可以在实模式中调用,当您使用DOS作为实际操作系统运行并且从不进入受保护(32位)模式时。请注意,64位处理器不再支持虚拟模式,因此您根本无法使用64位芯片。

有关这些内容的列表,请查看Ralf Brown's Interrupt List,这是对这个现已过时的界面的真正全面指南。

在Linux上,可能还有其他* nixes, int 80h 上有一个“系统调用”界面。但是,所有这些都可以通过C调用约定来调用,这可以更好地记录。检查the Linux source tree是否有号码 - >名称映射,并运行man syscall_name命令以获取等效C函数手册页的文档。我认为对于调用约定,参数的排序顺序相同。 (我已经为一些系统调用验证了这一点。)

int 80h 调用约定(对于* nix)在此处记录:int80h.org