我如何查看不透明的数据类型?

时间:2018-10-09 05:34:48

标签: c information-hiding opaque-pointers

我知道这种类型与不透明数据类型的全部问题有关,我需要进入fpos_t并查看其真正含义(在任何人说什么之前,我知道使用该信息是错误的,因为代码可能会在以后更改。我不需要此程序,而是需要此程序来消除好奇心。

不过,我不知道该怎么办;关于不透明值的大多数信息似乎都在谈论隐藏信息的概念,但很少提供有关信息内部机制以及如何撤消信息的指示。

2 个答案:

答案 0 :(得分:3)

除非您已经有了源代码,否则没有在不知道特定系统上基础表示的线索的情况下“侵入”不透明类型的可行方法。破解它需要在运行时跟踪每次对不透明指针的访问,然后查看它的去向,然后从那里开始猜测。

相反,您可以使用Google,例如Github上的glibc源。在stdio.h中,有一个条件typedef指向内部标头中的__fpos_t__fpos64_t

__fpos_t.h

typedef struct _G_fpos_t
{
  __off_t __pos;
  __mbstate_t __state;
} __fpos_t;

__fpos64_t.h

typedef struct _G_fpos64_t
{
  __off64_t __pos;
  __mbstate_t __state;
} __fpos64_t;

不太令人兴奋,但是您可以从Github继续跟踪那些不同的类型,然后看看它们到底是什么。整数和枚举很有可能。

答案 1 :(得分:1)

在VC ++中,它定义为

 typedef __int64 fpos_t;

依次是

typedef long long fpos_t;

如果您想知道它在汇编代码中的外观,那么只需编写示例程序并在调试模式下运行它,然后在调试时打开Disassembly Window来查看后面的代码。