Example #1
0
void ExportDirectory(const Volume& volume, const Partition& partition, const FileInfo& directory,
                     bool recursive, const std::string& filesystem_path,
                     const std::string& export_folder,
                     const std::function<bool(const std::string& path)>& update_progress)
{
  File::CreateFullPath(export_folder + '/');

  for (const FileInfo& file_info : directory)
  {
    const std::string name = file_info.GetName() + (file_info.IsDirectory() ? "/" : "");
    const std::string path = filesystem_path + name;
    const std::string export_path = export_folder + '/' + name;

    if (update_progress(path))
      return;

    DEBUG_LOG(DISCIO, "%s", export_path.c_str());

    if (!file_info.IsDirectory())
    {
      if (File::Exists(export_path))
        NOTICE_LOG(DISCIO, "%s already exists", export_path.c_str());
      else if (!ExportFile(volume, partition, &file_info, export_path))
        ERROR_LOG(DISCIO, "Could not export %s", export_path.c_str());
    }
    else if (recursive)
    {
      ExportDirectory(volume, partition, file_info, recursive, path, export_path, update_progress);
    }
  }
}
Example #2
0
void CR_Module::DumpExportSymbols()
{
    PIMAGE_EXPORT_DIRECTORY pDir = ExportDirectory();

    if (pDir == NULL)
        return;

    //DWORD dwNumberOfNames = pDir->NumberOfNames;
    //DWORD dwAddressOfFunctions = pDir->AddressOfFunctions;
    //DWORD dwAddressOfNames = pDir->AddressOfNames;
    //DWORD dwAddressOfOrdinals = pDir->AddressOfNameOrdinals;
    //LPDWORD pEAT = (LPDWORD)GetData(dwAddressOfFunctions);
    //LPDWORD pENPT = (LPDWORD)GetData(dwAddressOfNames);
    //LPWORD pOT = (LPWORD)GetData(dwAddressOfOrdinals);

    printf("\n### EXPORTS ###\n");
    printf("  Characteristics: 0x%08lX\n", pDir->Characteristics);
    printf("  TimeDateStamp: 0x%08lX (%s)\n", pDir->TimeDateStamp, CrGetTimeStampString(pDir->TimeDateStamp));
    printf("  Version: %u.%u\n", pDir->MajorVersion, pDir->MinorVersion);
    printf("  Name: 0x%08lX (%s)\n", pDir->Name, reinterpret_cast<char *>(GetData(pDir->Name)));
    printf("  Base: 0x%08lX (%lu)\n", pDir->Base, pDir->Base);
    printf("  NumberOfFunctions: 0x%08lX (%lu)\n", pDir->NumberOfFunctions, pDir->NumberOfFunctions);
    printf("  NumberOfNames: 0x%08lX (%lu)\n", pDir->NumberOfNames, pDir->NumberOfNames);
    printf("  AddressOfFunctions: 0x%08lX\n", pDir->AddressOfFunctions);
    printf("  AddressOfNames: 0x%08lX\n", pDir->AddressOfNames);
    printf("  AddressOfNameOrdinals: 0x%08lX\n", pDir->AddressOfNameOrdinals);
    printf("  \n");

    printf("  %-50s %-5s ; %-8s %-8s\n", "FUNCTION NAME", "ORDI.", "RVA", "VA");

    for (DWORD i = 0; i < ExportSymbols().size(); ++i)
    {
        CR_ExportSymbol& symbol = ExportSymbols()[i];
        if (symbol.dwRVA)
        {
            if (Is64Bit())
            {
                CR_Addr64 va = VA64FromRVA(symbol.dwRVA);
                if (symbol.pszName)
                    printf("  %-50s @%-4lu ; %08lX %08lX%08lX\n", 
                        symbol.pszName, symbol.dwOrdinal, symbol.dwRVA,
                        HILONG(va), LOLONG(va));
                else
                    printf("  %-50s @%-4lu ; %08lX %08lX%08lX\n", 
                        "(No Name)", symbol.dwOrdinal, symbol.dwRVA,
                        HILONG(va), LOLONG(va));
            }
            else if (Is32Bit())
            {
                CR_Addr32 va = VA32FromRVA(symbol.dwRVA);
                if (symbol.pszName)
                    printf("  %-50s @%-4lu ; %08lX %08lX\n", 
                        symbol.pszName, symbol.dwOrdinal, symbol.dwRVA, va);
                else
                    printf("  %-50s @%-4lu ; %08lX %08lX\n", 
                        "(No Name)", symbol.dwOrdinal, symbol.dwRVA, va);
            }
        }
        else
        {
            if (symbol.pszName)
                printf("  %-50s @%-4lu ; (forwarded to %s)\n", 
                    "(No Name)", symbol.dwOrdinal, symbol.pszForwarded);
            else
                printf("  %-50s @%-4lu ; (forwarded to %s)\n",
                    "(No Name)", symbol.dwOrdinal, symbol.pszForwarded);
        }
    }

    printf("\n\n");
}