`
qdujunjie
  • 浏览: 110342 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

汇编语言GetDateTime代码分析(20)

阅读更多

 

 

本文代码来自于《Intel汇编语言程序设计》(第四版)第11章---------32位windows编程。

 

GetDateTime其实是作者Irvine32库文件中的一个函数,它用来返回一个64位的整数,这个数值是自1601年1月1日开始的以100纳秒为单位的计数值。重要的是微软使用这个数值来作为文件的日期和时间。WIN32 SDK文档中给出的获得系统日期和时间的步骤如下:

 

1.调用一个函数(例如GetLocalTime)来填写SYSTEMTIME结构。

2.用SystemTimeToFileTime函数来讲SYSTEMTIME结构转换到FILETIME结构。

3.将FILETIME结构中的结果拷贝到一个64位的QWORD中。

 

其中FILETIME结构将一个64位的QWORD值划分为2个DWORD值:

 

FILETIME STRUCT

      loDateTime DWORD ?

      hiDateTime DWORD ?

FILETIME ENDS

 

 

下面是GetDateTime函数代码:

 

;------------------------------------------------------------------------------------

GetDateTime PROC

      pStartTime : PTR QWORD                ; 程序接收一个指向QWORD的指针

      LOCAL sysTime : SYSTEMTIME , fileTime : FILETIME    ; 程序定义了两个局部变量,分别是SYSTEMTIME 类型和FILETIME 类型

;

; Gets and saves the  current local date/time as a

; 64-bit integer ( in the Win32 FILETIME format).

;------------------------------------------------------------------------------------

; Get the system local time

       INVOKE GetLocalTime ,             ; 按照微软的建议,先得到一个时间,将它填充到SYSTEMTIME 结构中

       ADDR sysTime

 

; Convert the SYSTEMTIME to FILETIME

       INVOKE SystemTimeToFileTime,   ; 然后又按照微软的建议,将SYSTEMTIME 结构中的内容填充到FILETIME结构中

       ADDR sysTime,          ; SYSTEMTIME 结构

       ADDR flTime              ; FILETIME 结构

 

; Copy the FILETIME to a 64-bit integer

       mov esi , pStartTime               ; 然后我们再按照微软的建议执行第三步,这里先得到这个64位QWORD的地址

       mov eax , flTime.loDateTime   ; 将FILETIME 结构中的loDateTime段赋给eax

       mov DWORD PTR [esi] , eax    ; 讲eax 赋值到64位的pStartTime的低4字节中

       mov eax ,  flTime.hiDateTime   ; 将FILETIME 结构中的hiDateTime段赋给eax

       mov DWORD PTR [esi+4] , eax  ; 讲eax 赋值到64位的pStartTime的高4字节中

       ret                                          ; 按照微软的建议,我们得到了日期和时间,返回主函数

GetDateTime ENDP

 

 

 

代码结束。

 

 

分享到:
评论

相关推荐

    Irvine32.inc[汇编]

    这对于学习和开发汇编语言程序非常有用,尤其是对于初学者来说,可以极大地简化编程流程,避免重复编写常见功能的代码。同时,这份文件的使用也需要注意其适用环境和版本兼容性问题,确保与目标操作系统和开发工具相...

    时间算法代码

    首先,我们需要理解时间序列分析的基础,然后我们将详细讨论如何用C#编程语言与SQL Server进行交互,最后将介绍如何实现一个基本的时间预测模型。 时间序列分析是统计学中处理按时间顺序排列的数据集合的方法,这些...

    网上绝无仅有的Log分析教程及例子(实用1).zip

    在Android开发中,Log分析是调试应用程序不可或缺的一部分。它提供了程序运行时的详细信息,帮助开发者定位问题、优化性能和理解代码执行流程。本教程将深入探讨如何有效地利用Log进行分析,以提升Android应用的开发...

    最新支付宝手机网站支付源代码,安全可靠

    开发语言:ASP 版 权:支付宝()网络技术有限公司  制 作 者:支付宝技术部技术支持组 联系方式:https://support.open.alipay.com/alipay/support/index.htm 免责声明:DEMO仅供参考,实际开发中需要结合具体...

    Excel-VBA编程的常用代码.docx

    VBA(Visual Basic for Applications)是一种广泛应用于Microsoft Office等应用中的编程语言。它允许用户通过编写自定义脚本来自动化任务。在VBA中,正确声明变量非常重要,这有助于提高代码的可读性和维护性。 **...

    Android代码-KChartView

    public String getDatetime() { return Date; } public float getOpenPrice() { return Open; } public float getHighPrice() { return High; } public float getLowPrice() { return Low; } ...

    c#计算两日期的工作时间间隔(排除非工作日)及计算下一个工作时间点..pdf

    示例代码分析 在示例代码中,我们首先定义了两个日期和时间:`dt` 和 `dt2`。然后,我们计算这两个日期之间的工作时间间隔,并输出结果。最后,我们计算下一个工作时间点,并输出结果。 本文介绍了使用 C# 语言...

    ComUtils.java.zip

    通过分析这个文件,我们可以学习到如何编写高效且易于维护的工具类,同时也可以借鉴其中的编程技巧和最佳实践。 首先,让我们从字符串处理方面来看。在Java中,字符串操作是非常常见的,`ComUtils`可能包含一些如...

    TestHomework00:Javatop作业

    测试作业00 尝试测试作业00 ...getDateTime(): 2015-05-30T20:00 getDate(): 2015-05-30 getDateTime(): 2015-05-30T20:00 getDateTime(): 2015-05-31T10:00 getDate(): 2015-05-31 getDateTime(): 2015-05-31T1

    cxf生成onvif客户端

    每个服务都有对应的WSDL(Web服务描述语言)文件,这些文件详细描述了服务的接口、消息结构和操作。 Apache CXF是一个强大的工具,能够从WSDL文件自动生成Java客户端代码,使得开发者可以轻松地与Web服务进行交互。...

    c# 农历和节气

    1. **农历日期转换:** 通过提供的代码片段可以看出,这是一个用于将公历日期转换为农历日期的工具类 `ChinaCalendar`。这类工具在很多应用场景中都非常有用,比如传统节日提醒、农历生日纪念等。 2. **农历属性:*...

    BELL_IN_C_4.rar_In Time

    《实时钟源代码解析》 ...通过阅读和分析源代码,我们可以深入了解RTC的编程方法,这对于嵌入式系统的开发,特别是需要精确时间同步的应用,如物联网设备、服务器和各种实时操作系统,都是非常有价值的。

    如何实现C/S模式下客户机与服务器采用统一的时间

    在这样的系统中,通常存在一种需求:当用户在客户端对数据进行插入或修改操作时,需要记录这些操作的确切时间到数据库表中,以便后续进行基于时间的统计分析。 如果各个客户端和服务器之间的时间不一致,可能会导致...

    使用存储过程查询时间段数据 编程小实例,C++.net源代码编写

    这在数据分析、日志记录或者交易系统中尤其常见,因为这些场景通常需要对特定时间范围内的数据进行快速筛选。 首先,我们需要理解C++.NET如何与数据库进行交互。在C++.NET中,我们通常会使用ADO.NET(Microsoft的...

    完整网上购物书店JSP+MYSQL

    在开发过程中,开发者可能遇到了日期处理的问题,特别是"getDateTime",这通常涉及到日期和时间的获取、格式化和操作,这对于记录订单创建时间、更新时间等业务场景至关重要。 JSP是Java的一种动态网页技术,允许...

    TSQL编码规范

    【TSQL编码规范】是确保Transact-SQL代码质量和可维护性的关键,它涉及一系列的指导原则和约定,旨在提高数据库开发的效率和一致性。以下是对这些规范的详细解释: **1. 基本原则** - **大小写敏感**:在编写TSQL...

    UNIX环境下的日期程序(求时间的函数).doc

    以下是`GetDateTime()`函数的具体实现代码: ```c #include #include #include int GetDateTime(char *s, long int bill_long, char *d_str, char *t_str) { time_t timer, tim; struct tm tb, *tb1; int ...

    My97DatePicker

    - 多语言支持:内置多语言包,满足国际化需求。 3. **API接口**: - 初始化:通过JavaScript调用初始化函数,将My97DatePicker绑定到特定输入元素。 - 方法调用:如`getDateTime()`获取当前选中的日期和时间,`...

    Delphi 获取文件访问时间.rar

    相关代码如下:  procedure TForm1.SpeedButton1Click(Sender: TObject);  begin  if OpenDialog1.Execute then  begin  Edit1.Text := OpenDialog1.FileName;  Edit2.Text := '';  end;  end;  procedure ...

Global site tag (gtag.js) - Google Analytics