-
-
[求助]遍历win64的PE的导入表
-
发表于: 2017-5-22 16:14 2504
-
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.Ordinal != 0) { logptr("ord :", (void*)target_trunk[n].u1.Ordinal); if (target_trunk[n].u1.Ordinal & 1 << 31) { } else { 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++; }
64位,获取kernel32.dll的导入表首地址OriginalFirstThunk后,以上面的方法遍历该地址的IMAGE_THUNK_DATA对象,发现只能找到一个导入函数,第二个IMAGE_THUNK_DATA是0,user32.dll也是如此,不知道是我遍历的方式有问题,还是什么其他的地方有问题
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: