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

How do I see inside opaque data types?

我知道这违背了不透明数据类型的全部要点,但是出于逆向工程的目的,人们如何着手研究不透明数据类型?

在VC++中定义为

 typedef __int64 fpos_t;

这又是

typedef long long fpos_t;

如果你想知道它在汇编代码中的样子,那就写一个示例程序,运行它在调试模式下,调试时,打开Disassembly Window看代码后面。

除非您已经拥有源代码,否则没有可行的方法来 "hack inside" 不透明类型而不了解特定系统上的底层表示形式。破解它需要跟踪对 run-time 中不透明指针的每次访问,看看它去了哪里,然后从那里开始猜测。

相反,您可以 Google 例如 Github 的 glibc 源代码。在 stdio.h 中有一个条件类型定义,它指向内部 headers:

中的 __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 处追踪那些不同的类型,看看它们最终归结为什么。整数和枚举,最有可能。