-
-
未解决
[悬赏]遍历win64PE文件的导入表
5.00雪花
-
发表于:
2017-5-23 14:56
2895
-
未解决 [悬赏]遍历win64PE文件的导入表
5.00雪花
在遍历某个程序的kernel32.dll对应导入表时,以OriginFirstThunk指向的位置作为IMAGE_THUNK_DATA数组的起始地址,第一个IMAGE_THUNK_DATA是有值的,第二个值则为0,我以为这个数组是以一个全0的元素作为结尾的,可是这就意味着kernel32中只导入了一个函数,这似乎有些问题。如果IMAGE_THUNK_DATA数组不是以0作为数组的结束,那么如何获取数组的大小?
PIMAGE_THUNK_DATA target_trunk = (PIMAGE_THUNK_DATA)RvaToFileAddress(import_table[i].OriginalFirstThunk);
int n = 0;
bool found_func = false;
while (target_trunk[n].u1.AddressOfData != NULL)
{
logptr("ord :", (void*)target_trunk[n].u1.Ordinal);
if (!IMAGE_SNAP_BY_ORDINAL(target_trunk[n].u1.Ordinal))
{
//名字导入
PIMAGE_IMPORT_BY_NAME func_name = (PIMAGE_IMPORT_BY_NAME)RvaToFileAddress(target_trunk[n].u1.AddressOfData);
/*
typedef struct _IMAGE_IMPORT_BY_NAME {
WORD Hint;
CHAR Name[1]; //类似余变长数组的trick,在语法中Name标示起始地址
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
*/
logdstr("got function:", func_name->Name);
if (strcmp(func_name->Name, funcname) == 0)
{
found_func = true;
logdstr("got match:", funcname);
break;
}
}
n++;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)