我正在阅读一本描述逆转技术的书,我很困惑。
RtlNumberGenericTableElements:
7C923FD2 PUSH EBP
7C923FD3 MOV EBP,ESP
7C923FD5 MOV EAX,DWORD PTR [EBP+8]
7C923FD8 MOV EAX,DWORD PTR [EAX+14]
7C923FDB POP EBP
7C923FDC RET 4
基本上 [EBP+8] 包含通用表结构的地址,我们将结构的第 6 个元素的值移动到 EAX,然后返回它。在书中,作者将 struct 翻译成 C 并得出结论,移动到 EAX 的这个值只不过是表中元素的数量。
struct TABLE
{
UNKNOWN Member1;
UNKNOWN_PTR Member2;
UNKNOWN_PTR Member3;
UNKNOWN_PTR Member4;
UNKNOWN Member5;
ULONG NumberOfElements;
UNKNOWN Member7;
UNKNOWN Member8;
UNKNOWN Member9;
UNKNOWN Member10;
};
让我感到困惑的是看到 ULONG 数据类型,所以它指的是 64 位值,对吗?
而且我忘了提到,当结构在之前的反汇编代码片段中初始化时,所有元素都是 4 字节长。