查看: 26158|回复: 22

Windows上64位编程

[复制链接]
  • TA的每日心情
    奋斗
    2016-11-25 19:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2015-3-8 19:14:03 | 显示全部楼层 |阅读模式
    定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长。在不同的平台上,根据编译器不同的实现,它们的字长如下表所示:  

    数据类型     LP64    ILP64    LLP64  ILP32   LP32

    char               8          8            8           8           8

    short             16         16         16         16          16

    _int32            N/A     32          N/A      N/A       N/A

    int                  32        64          32        32          16

    long                64        64          32        32          32

    long long        N/A      N/A      64         N/A      N/A

    pointer          64          64         64        32          32


    在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。

    LP64意思是long和pointer是64位,ILP64指int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。

    32位Windows采用的是IP32数据模型,64位Windows采用的是LLP64数据模型。
    所以,Windows上的32位程序设计和64位程序设计最大的不同(也就是IP32和LLP64的不同),就在于指针的长度不同??由32位变成了64位。

    Win32 API在很多情况下,都需要将整数转换成指针或者相反。在 32 位的硬件上不会有问题,其中指针的大小和整数的大小是相同的,但在 64 位的硬件上却完全不一样。

    为此M$搞了个所谓的“多态类型”:
    对于特定的精度,您可以使用固定精度的数据类型。不管处理器的词大小如何,它们的大小都是一致的。大多数这些类型都在它们的名称中包含精度,可以从下面的表中看出:

    表 1. 固定精度的数据类型
    类型 定义
    DWORD32            
    32 位无符号整数

    DWORD64
    64 位无符号整数

    INT32
    32 位有符号整数

    INT64
    64 位有符号整数

    LONG32
    32 位有符号整数

    LONG64
    64 位有符号整数

    UINT32
    无符号 INT32

    UINT64
    无符号 INT64

    ULONG32
    无符号 LONG32

    ULONG64
    无符号 LONG64


    此外,当您需要数据类型的精度随着处理器词大小变化时,请使用指针精度数据类型。这些类型又称为“多态”数据类型。这些类型通常以 _PTR 后缀结尾,如下面的表格所示:

    表 2. 指针精度的数据类型
    类型 定义
    DWORD_PTR              
    指针精度的无符号长类型

    HALF_PTR
    指针大小的一半。用于包含一个指针和两个小型字段的结构中

    INT_PTR
    指针精度的有符号整型

    LONG_PTR
    指针精度的有符号长类型

    SIZE_T
    指针可以引用的最大字节数。用于必须跨指针的整个范围的计数

    SSIZE_T
    有符号 SIZE_T

    UHALF_PTR
    无符号 HALF_PTR

    UINT_PTR
    无符号 INT_PTR

    ULONG_PTR
    无符号 LONG_PTR

    LPARAM
    与 LONG_PTR 为同义词,(在WTypes.h 中定义)

    WPARAM
    与 UINT_PTR 为同义词,(在 WTypes.h 中定义)


    通过整数参数传递参数或上下文信息的所有 Win32 API 都更改为使用这些新的类型。

    此外,还出现了定长指针:POINTER_32和POINTER_64:
    #define POINTER_32 __ptr32
    #define POINTER_64 __ptr64
    PS:M$DN中说是在Basetsd.h中定义的,但实际上是在WinNT.h中定义的。

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2016-8-29 16:30
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2015-3-12 16:53:25 | 显示全部楼层
    很有分享精神,没有隐藏起来。顶一个吧。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 00:31:08 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-10-24 10:52
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-6-28 05:49:42 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 07:21:30 | 显示全部楼层
    还是不错的哦,顶了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 07:54:32 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-4-13 21:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-6-29 08:42:12 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-29 15:29:58 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-14 17:44
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2015-6-29 18:57:46 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-10-21 10:32
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2015-6-30 01:11:26 | 显示全部楼层
    学习学习技术,加油!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-17 23:51 , Processed in 0.026797 second(s), 15 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部