IDA中的_OWORD

IDA中的_OWORD

996.icu LICENSE

  • 一个有意思的巧合
  • _OWORD的含义
  • 总结

阅读之前注意:

本文阅读建议用时:5min
本文阅读结构如下表:

项目下属项目测试用例数量
一个有意思的巧合0
_OWORD的含义1
总结0

一个有意思的巧合

正如我们所知道的那样,在英文的月份缩写中,OCT代表着十月(October),而DEC代表着十二月(December)。
但是对于经常接触进制转换的程序员来说,他们还有着额外的意思,OCT代表八进制(octal),DEC则代表十六进制(hexadecimal)。
真是一种奇怪的巧合!

_OWORD的含义

在IDA中,_WORD代表一个字(1个字=2个字节=16位),_DWORD代表两个字(2个字=4个字节=32位),_QWORD(4个字=8个字节=64位)。
现在,你应该知道_OWORD代表什么意思了吧?

没错,_OWORD(8个字=16个字节=128位)!

尽管我们在常见的IDA头文件定义中可以看到如下宏定义,但_OWORD却没有被定义。

/*

This file contains definitions used by the Hex-Rays decompiler output.
It has type definitions and convenience macros to make the
output more readable.

Copyright (c) 2007-2011 Hex-Rays

*/


#if defined(__GNUC__)
typedef          long long ll;
typedef unsigned long long ull;
#define __int64 long long
#define __int32 int
#define __int16 short
#define __int8  char
#define MAKELL(num) num ## LL
#define FMT_64 "ll"
#elif defined(_MSC_VER)
typedef          __int64 ll;
typedef unsigned __int64 ull;
#define MAKELL(num) num ## i64
#define FMT_64 "I64"
#elif defined (__BORLANDC__)
typedef          __int64 ll;
typedef unsigned __int64 ull;
#define MAKELL(num) num ## i64
#define FMT_64 "L"
#else
#error "unknown compiler"
#endif
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned long ulong;

typedef          char   int8;
typedef   signed char   sint8;
typedef unsigned char   uint8;
typedef          short  int16;
typedef   signed short  sint16;
typedef unsigned short  uint16;
typedef          int    int32;
typedef   signed int    sint32;
typedef unsigned int    uint32;
typedef ll              int64;
typedef ll              sint64;
typedef ull             uint64;

// Partially defined types:
#define _BYTE  uint8
#define _WORD  uint16
#define _DWORD uint32
#define _QWORD uint64
#if !defined(_MSC_VER)
#define _LONGLONG __int128
#endif

这是为什么呢?我们直观的理解下,你可能很熟悉int、float、double、char这些数据类型,但C标准中的最大的数据类型long long或者double才只有8个字节(64位)。而_OWORD的128位已经超过这个表示范围了!因此我们没有既看到__int128的宏定义,也没有看到_OWORD的宏定义。

总结

本篇博客的核心是:_OWORD(8个字=16个字节=128位),因为超过了C语言中数据类型可以表示的最大范围(64位)而不被支持,所以需要我们手动实现相关支持。

如果本文对你有帮助,不如请我一杯可乐吧

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值