AslpFileQueryExportName
__int64 __fastcall AslpFileQueryExportName(NTSTRSAFE_PSTR pszDest, __int64 a2){
int ImageNtHeader;
unsigned int v5;
const CHAR *v6;
UINT64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
CHAR *v10;
unsigned int v11;
int v13;
UINT64 Size;
__int64 v15;
LODWORD(Size) = 0;
v15 = 0i64;
*pszDest = 0;
ImageNtHeader = AslpFileGetImageNtHeader(&v15, a2);
v5 = ImageNtHeader;
if( ImageNtHeader < 0 )
{
v6 = "AslpFileGetImageNtHeader failed [%x]";
v7 = 3254i64;
LABEL_3:
v13 = ImageNtHeader;
AslLogCallPrintf(1ui64, "AslpFileQueryExportName", v7, v6, v13);
return v5;
}
LODWORD(v8) = RtlImageDirectoryEntryToData(*(PVOID *)(a2 + 32), *(_BYTE *)(a2 + 59), 0, &Size);
if( v8 && (unsigned int)Size >= 0x28 )
{
v9 = *(_QWORD *)(a2 + 32);
if( v8 < v9 || v8 + 40 > *(_QWORD *)(a2 + 24) + v9 )
{
v5 = -1073741701;
AslLogCallPrintf(
2ui64,
"AslpFileQueryExportName",
0xCD5ui64,
"Export directory pointer invalid(points to location outside file), invalid image format");
return v5;
}
v10 = (CHAR *)AslpImageRvaToVa(v15, a2 + 8, *(_DWORD *)(v8 + 12));
if( !v10 || (unsigned __int64)v10 >= *(_QWORD *)(a2 + 32) + *(_QWORD *)(a2 + 24) || !*v10 )
{
v5 = -1073741701;
AslLogCallPrintf(2ui64, "AslpFileQueryExportName", 0xCDEui64, "Export directory invalid or invalid image format");
return v5;
}
v11 = *(_DWORD *)(a2 + 32) + *(_DWORD *)(a2 + 24) - (_DWORD)v10;
if( v11 > 0x100 )
v11 = 256;
ImageNtHeader = RtlStringCchCopyA(pszDest, v11, v10);
v5 = ImageNtHeader;
if( ImageNtHeader >= 0 )
return 0;
v6 = "RtlStringCchCopyA failed [%x]";
v7 = 3306i64;
goto LABEL_3;
}
v5 = -1073741275;
if( v8 )
AslLogCallPrintf(
2ui64,
"AslpFileQueryExportName",
0xCC7ui64,
"RtlImageDirectoryEntryToData returned ExportDirectory that was too small");
return v5;
}Referenced by:
AslpFileGetExportName