Skip to content

Commit

Permalink
cxbe: Remove unused Xbe constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
abaire authored and mborgerson committed Jul 7, 2023
1 parent 58847f7 commit 716bf1c
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 295 deletions.
292 changes: 0 additions & 292 deletions tools/cxbe/Xbe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,298 +20,6 @@
static const char kKernelImageName[] = "xboxkrnl.exe";
static uint32 CountNonKernelImportTableEntries(class Exe *x_Exe, uint32_t *extra_bytes);

// construct via Xbe file
Xbe::Xbe(const char *x_szFilename)
{
char szBuffer[260];

ConstructorInit();

printf("Xbe::Xbe: Opening Xbe file...");

FILE *XbeFile = fopen(x_szFilename, "rb");

// verify Xbe file was opened successfully
if(XbeFile == NULL)
{
SetError("Could not open Xbe file", true);
goto cleanup;
}

printf("OK\n");

// read Xbe image header
{
printf("Xbe::Xbe: Reading Image Header...");

if(fread(&m_Header, sizeof(m_Header), 1, XbeFile) != 1)
{
SetError("Unexpected end of file while reading Xbe Image Header", true);
goto cleanup;
}

if(m_Header.dwMagic != *(uint32 *)"XBEH")
{
SetError("Invalid magic number in Xbe file", true);
goto cleanup;
}

printf("OK\n");
}

// read Xbe image header extra bytes
if(m_Header.dwSizeofHeaders > sizeof(m_Header))
{
printf("Xbe::Xbe: Reading Image Header Extra Bytes...");

uint32 ExSize = RoundUp(m_Header.dwSizeofHeaders, 0x1000) - sizeof(m_Header);

m_HeaderEx = new char[ExSize];

if(fread(m_HeaderEx, ExSize, 1, XbeFile) != 1)
{
SetError("Unexpected end of file while reading Xbe Image Header (Ex)", true);
goto cleanup;
}

printf("OK\n");
}

// read Xbe certificate
{
printf("Xbe::Xbe: Reading Certificate...");

fseek(XbeFile, m_Header.dwCertificateAddr - m_Header.dwBaseAddr, SEEK_SET);

if(fread(&m_Certificate, sizeof(m_Certificate), 1, XbeFile) != 1)
{
SetError("Unexpected end of file while reading Xbe Certificate", true);
goto cleanup;
}

// generate ascii title from certificate title name
setlocale( LC_ALL, "English" );
//wcstombs(m_szAsciiTitle, m_Certificate.wszTitleName, 40);
char *c = m_szAsciiTitle;
char *d = (char *) m_Certificate.wszTitleName;
while ((uint16*)d < &m_Certificate.wszTitleName[40] && *d) {
*c++ = *d++;
d++;
}
*c = '\0';

printf("OK\n");

printf("Xbe::Xbe: Title identified as %s\n", m_szAsciiTitle);
}

// read Xbe section headers
{
printf("Xbe::Xbe: Reading Section Headers...\n");

fseek(XbeFile, m_Header.dwSectionHeadersAddr - m_Header.dwBaseAddr, SEEK_SET);

m_SectionHeader = new SectionHeader[m_Header.dwSections];

for(uint32 v=0;v<m_Header.dwSections;v++)
{
printf("Xbe::Xbe: Reading Section Header 0x%.04X...", v);

if(fread(&m_SectionHeader[v], sizeof(*m_SectionHeader), 1, XbeFile) != 1)
{
snprintf(szBuffer,
sizeof(szBuffer),
"Unexpected end of file while reading Xbe Section Header %d (%Xh)",
v,
v);
SetError(szBuffer, true);
goto cleanup;
}

printf("OK\n");
}
}

// read Xbe section names
{
printf("Xbe::Xbe: Reading Section Names...\n");

m_szSectionName = new char[m_Header.dwSections][9];
for(uint32 v=0;v<m_Header.dwSections;v++)
{
printf("Xbe::Xbe: Reading Section Name 0x%.04X...", v);

uint08 *sn = GetAddr(m_SectionHeader[v].dwSectionNameAddr);

memset(m_szSectionName[v], 0, 9);

if(sn != 0)
{
for(int b=0;b<8;b++)
{
m_szSectionName[v][b] = sn[b];

if(m_szSectionName[v][b] == '\0')
break;
}
}

printf("OK (%s)\n", m_szSectionName[v]);
}
}

// read Xbe library versions
if(m_Header.dwLibraryVersionsAddr != 0)
{
printf("Xbe::Xbe: Reading Library Versions...\n");

fseek(XbeFile, m_Header.dwLibraryVersionsAddr - m_Header.dwBaseAddr, SEEK_SET);

m_LibraryVersion = new LibraryVersion[m_Header.dwLibraryVersions];

for(uint32 v=0;v<m_Header.dwLibraryVersions;v++)
{
printf("Xbe::Xbe: Reading Library Version 0x%.04X...", v);

if(fread(&m_LibraryVersion[v], sizeof(*m_LibraryVersion), 1, XbeFile) != 1)
{
snprintf(szBuffer,
sizeof(szBuffer),
"Unexpected end of file while reading Xbe Library Version %d (%Xh)",
v,
v);
SetError(szBuffer, true);
goto cleanup;
}

printf("OK\n");
}

// read Xbe kernel library version
{
printf("Xbe::Xbe: Reading Kernel Library Version...");

if(m_Header.dwKernelLibraryVersionAddr == 0)
{
SetError("Could not locate kernel library version", true);
goto cleanup;
}

fseek(XbeFile, m_Header.dwKernelLibraryVersionAddr - m_Header.dwBaseAddr, SEEK_SET);

m_KernelLibraryVersion = new LibraryVersion;

if(fread(m_KernelLibraryVersion, sizeof(*m_LibraryVersion), 1, XbeFile) != 1)
{
SetError("Unexpected end of file while reading Xbe Kernel Version", true);
goto cleanup;
}

printf("OK\n");
}

// read Xbe Xapi library version
{
printf("Xbe::Xbe: Reading Xapi Library Version...");

if(m_Header.dwXAPILibraryVersionAddr == 0)
{
SetError("Could not locate Xapi Library Version", true);
goto cleanup;
}

fseek(XbeFile, m_Header.dwXAPILibraryVersionAddr - m_Header.dwBaseAddr, SEEK_SET);

m_XAPILibraryVersion = new LibraryVersion;

if(fread(m_XAPILibraryVersion, sizeof(*m_LibraryVersion), 1, XbeFile) != 1)
{
SetError("Unexpected end of file while reading Xbe Xapi Version", true);
goto cleanup;
}

printf("OK\n");
}
}

// read Xbe sections
{
printf("Xbe::Xbe: Reading Sections...\n");

m_bzSection = new uint08*[m_Header.dwSections];

memset(m_bzSection, 0, m_Header.dwSections);

for(uint32 v=0;v<m_Header.dwSections;v++)
{
printf("Xbe::Xbe: Reading Section 0x%.04X...", v);

uint32 RawSize = m_SectionHeader[v].dwSizeofRaw;
uint32 RawAddr = m_SectionHeader[v].dwRawAddr;

m_bzSection[v] = new uint08[RawSize];

fseek(XbeFile, RawAddr, SEEK_SET);

if(RawSize == 0)
{
printf("OK\n");
continue;
}

if(fread(m_bzSection[v], RawSize, 1, XbeFile) != 1)
{
snprintf(szBuffer,
sizeof(szBuffer),
"Unexpected end of file while reading Xbe Section %d (%Xh) (%s)",
v,
v,
m_szSectionName[v]);
SetError(szBuffer, true);
goto cleanup;
}

printf("OK\n");
}
}

// read Xbe thread local storage
if(m_Header.dwTLSAddr != 0)
{
printf("Xbe::Xbe: Reading Thread Local Storage...");

void *Addr = GetAddr(m_Header.dwTLSAddr);

if(Addr == 0)
{
SetError("Could not locate Thread Local Storage", true);
goto cleanup;
}

m_TLS = new TLS;

memcpy(m_TLS, Addr, sizeof(*m_TLS));

printf("OK\n");
}

cleanup:

if(GetError() != 0)
{
printf("FAILED!\n");
printf("Xbe::Xbe: ERROR -> %s\n", GetError());
}

if(XbeFile != NULL)
{
fclose(XbeFile);
XbeFile = NULL;
}

return;
}

// construct via Exe file object
Xbe::Xbe(class Exe *x_Exe, const char *x_szTitle, bool x_bRetail, const std::vector<uint08> *logo)
{
Expand Down
3 changes: 0 additions & 3 deletions tools/cxbe/Xbe.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ typedef struct XBE_IMAGE_IMPORT_DESCRIPTOR
class Xbe : public Error
{
public:
// construct via Xbe file
Xbe(const char *x_szFilename);

// construct via Exe file object
Xbe(class Exe *x_Exe, const char *x_szTitle, bool x_bRetail, const std::vector<uint08> *logo = nullptr);

Expand Down

0 comments on commit 716bf1c

Please sign in to comment.