分析PE文件头导入表,IID和Name得到的地址不对,name=0,跪求大佬指点一下

void ImPortD() {
DWORD dwDataStartRVA;//输入表的RVA
PIMAGE_IMPORT_DESCRIPTOR pImportDesc;//指向输入表的指针
//IMAGE_DIRECTORY_ENTRY_IMPORT=1
dwDataStartRVA = ycOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
if (!dwDataStartRVA)

return;
//RVA转VA,注意VA是打开的PE文件在本进程空间中映射的VA
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageRvaToVa(ycNTHeader, ImageBase, dwDataStartRVA, NULL);
//分析IID数组成员,直到成员为0

while (pImportDesc->FirstThunk){ // while(pImportDesc-> OriginalFirstThunk
    //当前IID数组成员的取值:
    pImportDesc->OriginalFirstThunk;  //INT RVA
    pImportDesc->TimeDateStamp;
    pImportDesc->ForwarderChain;
    pImportDesc->Name;  //Name RVA
    pImportDesc->FirstThunk;    //IAT RVA
    pImportDesc++;  //指针++,下1个数组成员
}//end while
//分析某个.dll对应的INT或IAT数组成员    
char    cOrd[30], cMemAddr[30], * FuncName; //函数序号,地址,函数名
DWORD dwThunk; //OriginalFirstThunk或FirstThunk值 
DWORD* pdwRVA = NULL; //OriginalFirstThunk或FirstThunk RVA指针   
DWORD* pdwThunk = NULL; //IMAGE_THUNK_DATA的指针 
PIMAGE_IMPORT_BY_NAME pByName = NULL; // BY_NAME的指针   
//获取第一个IID
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageRvaToVa(ycNTHeader, ImageBase, dwDataStartRVA, NULL);
while (pImportDesc->FirstThunk) {   //pImportDesc->OriginalFirstThun
    //取OriginalFirstThunk或FirstThunk  32位取值
    dwThunk = pImportDesc->OriginalFirstThunk;
    //取OriginalFirstThunk或FirstThunk  RVA值        
    pdwRVA = (DWORD*)dwThunk;
    //IMAGE_THUNK_DATA的VA
    pdwThunk = (DWORD*)ImageRvaToVa(ycNTHeader, ImageBase, dwThunk, NULL);  

    if (!pdwThunk)  
        return;

    while (*pdwThunk)//指向INT或IAT数组
    {
        if (HIWORD(*pdwThunk) == 0x8000) {//判断ThunkValue最高位的取值0?1
            //printf("序号");
        }//是序号
        else {  //是函数名
                //循环处理下一个函数
            ++pdwRVA;       //OriginalFirstThunk或FirstThunk  RVA值++
            ++pdwThunk; //IMAGE_THUNK_DATA的指针
        }//end while
        }
        pImportDesc++;//循环,下1个.dll的导入函数
        }//end while    

printf("IID=%X\n", (int)pImportDesc-(int)ImageBase);
printf("name=%X\n", (char*)ImageRvaToVa(ycNTHeader, ImageBase, pImportDesc->Name, NULL));