如何检查来自dll的加载地址是函数还是变量?

时间:2013-03-18 21:05:43

标签: dll shared-libraries dllexport

所以我用这种语法加载函数:

typedef void* (*unknownf)(
#ifdef __cplusplus
...
#endif
);
unknown funci=(unknownf*)GetProcAddress(dll, "SomeFunction");`

以及此

的数据
typedef void* (*unknownd);
conversiontype *some=(unknownd*)GetProcAddress(dll,"SomeData");

如何检查地址是否包含数据或功能?还有什么可以吗?

编辑:请问有一些程序化的方法来检查吗?

2 个答案:

答案 0 :(得分:0)

查看指针指向的前几个字节。如果你看到这样的话:

55 89 e5

(在x86上)或:

55 48 89 e5

(在x86-64上)

然后它可能是一个功能。

答案 1 :(得分:0)

我找到了一种方法来检查DLL的IMAGE_DOS_HEADER以获取.data .edata .rdata和.reloc部分,然后我尝试确定哪个部分是名称。