神奇的汇编(九)

版本信息是通过rc.exe编译器编译在资源里面的,它的格式大概是这样
VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080403a8"
        BEGIN
            VALUE "CompanyName", "TODO: <公司名>"
            VALUE "FileDescription", "TODO: <文件说明>"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", "QQLike2.exe"
            VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有权利。"
            VALUE "OriginalFilename", "QQLike2.exe"
            VALUE "ProductName", "TODO: <产品名>"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x804, 936
    END
END

BEGIN上面的部分是版本信息的固有属性,BEGIN里面叫做信息块

要获取文件中的版本信息其实很简单
1.通过GetFileVersionInfoSize函数检查文件中是否有版本信息
  invoke GetFileVersionInfoSize,addr szFile,NULL
2.通过GetFileVersionInfo来获取版本信息
   invoke GetFileVersinoInfo,add szFile,NULL,sizeof dbVerInfo,addr dbVerInfo
3.通过VerQueryValue来“解释”上面返回的字符串
  invoke VerQueryValue,addr dbVerInfo,addr szRoot,addr lpBuffer,addr dwLen
这个函数会返回一个VS_FIXEDFILEINFO结构,这个结构中有定义的固定属性内容。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值