我如何查看不透明数据类型的内部?
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
typedef struct _G_fpos_t
{
__off_t __pos;
__mbstate_t __state;
} __fpos_t;
typedef struct _G_fpos64_t
{
__off64_t __pos;
__mbstate_t __state;
} __fpos64_t;
不是很令人兴奋,但您可以从那里继续在 Github 处追踪那些不同的类型,看看它们最终归结为什么。整数和枚举,最有可能。
我知道这违背了不透明数据类型的全部要点,但是出于逆向工程的目的,人们如何着手研究不透明数据类型?
在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
typedef struct _G_fpos_t
{
__off_t __pos;
__mbstate_t __state;
} __fpos_t;
typedef struct _G_fpos64_t
{
__off64_t __pos;
__mbstate_t __state;
} __fpos64_t;
不是很令人兴奋,但您可以从那里继续在 Github 处追踪那些不同的类型,看看它们最终归结为什么。整数和枚举,最有可能。