RtlpCaptureRetpolineBinaryInfoForImage

INT64 __fastcall RtlpCaptureRetpolineBinaryInfoForImage(PVOID Base, INT64 a2, UINT64 a3, INT64 a4, INT64 a5, INT64 a6){
  __int64 v7; 
  _DWORD *v10; 
  unsigned int v11; 
  __int64 v12; 
  INT64 v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int *v17; 
  __int64 v18; 
  unsigned int v19; 
  __int64 v20; 
  int Size[10]; 
  v7 = (unsigned int)a3;
  *(_OWORD *)a6 = 0i64;
  *(_OWORD *)(a6 + 16) = 0i64;
  *(_OWORD *)(a6 + 32) = 0i64;
  LODWORD(v10) = LdrImageDirectoryEntryToLoadConfig(Base);
  v11 = 0;
  if( v10 && *v10 >= 0xC8u )
  {
    if( *((_QWORD *)v10 + 15) )
      *(_DWORD *)(a6 + 4) = v10[30] - a2;
    LODWORD(v12) = RtlImageDirectoryEntryToData(Base, 1u, 0xCu, (UINT64 *)Size);
    if( v12 )
      *(_DWORD *)(a6 + 8) = v12 - (_DWORD)Base;
    if( a4 )
    {
      v14 = a4 - a2;
      v15 = *(_DWORD *)(a5 + 72);
      v16 = *(_DWORD *)(a5 + 76);
      if( v15 <= *(_DWORD *)(a5 + 68) )
        v15 = *(_DWORD *)(a5 + 68);
      if( v16 <= v15 )
        v16 = v15;
      v17 = (unsigned int *)(a5 + 4);
      v18 = 16i64;
      do
      {
        v19 = v16;
        v16 = *v17++;
        if( v16 <= v19 )
          v16 = v19;
        --v18;
      }
      while( v18 );
      v20 = v14 + v16;
      if( __OFSUB__(v20, v14) || v20 > 0x7FFFFFFF || v14 - v7 < (__int64)0xFFFFFFFF80000000ui64 )
        return(unsigned int)-1073741776;
      else
        *(_DWORD *)a6 = v14;
    }
  }
  else
  {
    return(unsigned int)-1073741637;
  }
  return v11;
}

Referenced by:

RtlPerformRetpolineRelocationsOnImageEx
RtlUpdateImportRelocationsInImage