我需要在Windows上找到以二进制形式查找Intel x86 Assembly的当前日期。我被允许使用Windows程序。
答案 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