我知道这种做法违背了不透明数据类型的全部观点,但出于逆向工程的目的,人们如何着手研究不透明数据类型?
问问题
298 次
2 回答
4
除非您已经拥有源代码,否则在不了解特定系统上的底层表示的情况下,没有可行的方法来“破解”不透明类型。破解它将涉及在运行时跟踪对不透明指针的每次访问并查看它的去向,然后从那里开始猜测。
相反,您可以谷歌例如 Github 上的 glibc 源代码。在 stdio.h 中有一个条件 typedef 指向内部标题__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 上追踪这些不同的类型,看看它们最终归结为什么。很可能是整数和枚举。
于 2018-10-09T06:38:23.240 回答
1
在 VC++ 中定义为
typedef __int64 fpos_t;
这又是
typedef long long fpos_t;
如果您想知道它在汇编代码中的样子,那么只需编写一个示例程序,在调试模式下运行它,然后在调试时打开Disassembly Window
以查看后面的代码。
于 2018-10-09T05:59:48.013 回答