我在 IDA Pro 中对二进制文件进行逆向工程,我遇到了sub_8048FB6
我认为提供函数指针地址的函数。子程序的反编译如下,我试图找到result
.
int __cdecl sub_8048FB6(int a1)
{
int result; // eax
int v2; // [esp+0h] [ebp-10h]
int v3; // [esp+4h] [ebp-Ch]
v2 = *(_DWORD *)dword_804C0D4;
v3 = *(_DWORD *)(8 * a1 + 4 + *(_DWORD *)dword_804C0D4);
if ( a1 & 1 )
result = *(_DWORD *)(8 * a1 + v2) - v3;
else
result = *(_DWORD *)(*(_DWORD *)(8 * a1 + v2) - v3);
return result;
}
dword_804C0D4
我猜测的变量指向一个内存位置,并且在二进制文件中只被引用了 2 次,如下所示:
Up r sub_8048FB6+6 mov eax, ds:dword_804C0D4
Up w sub_804A24E+3 mov ds:dword_804C0D4, offset unk_804C0B8
所以,我的猜测是变量的偏移量unk_804C0B8
是指向的地址中的值ds:dword_804C0D4
。如果是这种情况,关于在哪里计算偏移量?一旦我双击unk_804C0B8
我得到:
LOAD:0804C0B8 unk_804C0B8 db 0E8h ; DATA XREF: sub_804A24E+3↑o
LOAD:0804C0B9 db 0FFh
LOAD:0804C0BA db 0FFh
LOAD:0804C0BB db 8Bh
LOAD:0804C0BC db 85h
LOAD:0804C0BD db 68h ; h
LOAD:0804C0BE db 0BFh
LOAD:0804C0BF db 0FBh
LOAD:0804C0C0 db 0FFh
LOAD:0804C0C1 db 89h
LOAD:0804C0C2 db 0C2h
LOAD:0804C0C3 db 0B8h
LOAD:0804C0C4 db 0
LOAD:0804C0C5 db 0
LOAD:0804C0C6 db 0
LOAD:0804C0C7 db 0
LOAD:0804C0C8 dword_804C0C8 dd 0FFEB0EE8h ; DATA XREF: sub_8049D1E+2B1↑r
但我不知道如何用所有这些db
s读取值。它的大小offset unk_804C0B8
和价值是多少?我是否正确进行?