Print original/new subsystem names and turn new subsystem name case insensitive
All checks were successful
Builds / XTChain (push) Successful in 1h23m4s
All checks were successful
Builds / XTChain (push) Successful in 1h23m4s
This commit is contained in:
parent
a522cdc583
commit
1f72016fc2
@ -15,6 +15,7 @@ typedef struct _PE_SUBSYSTEM
|
|||||||
} PE_SUBSYSTEM, *PPE_SUBSYSTEM;
|
} PE_SUBSYSTEM, *PPE_SUBSYSTEM;
|
||||||
|
|
||||||
static PE_SUBSYSTEM SubSystems[] = {
|
static PE_SUBSYSTEM SubSystems[] = {
|
||||||
|
{0x00, "INVALID_SUBSYSTEM"},
|
||||||
{0x01, "NT_NATIVE"},
|
{0x01, "NT_NATIVE"},
|
||||||
{0x02, "WINDOWS_GUI"},
|
{0x02, "WINDOWS_GUI"},
|
||||||
{0x03, "WINDOWS_CLI"},
|
{0x03, "WINDOWS_CLI"},
|
||||||
@ -37,7 +38,7 @@ static PE_SUBSYSTEM SubSystems[] = {
|
|||||||
{0x19, "XT_APPLICATION_GDI"}
|
{0x19, "XT_APPLICATION_GDI"}
|
||||||
};
|
};
|
||||||
|
|
||||||
int getSubSystemID(char *Name)
|
PPE_SUBSYSTEM getSubSystem(char *Name)
|
||||||
{
|
{
|
||||||
int Index;
|
int Index;
|
||||||
int SubSystemsCount;
|
int SubSystemsCount;
|
||||||
@ -50,15 +51,39 @@ int getSubSystemID(char *Name)
|
|||||||
for(Index = 0; Index < SubSystemsCount; Index++)
|
for(Index = 0; Index < SubSystemsCount; Index++)
|
||||||
{
|
{
|
||||||
SubSystem = &SubSystems[Index];
|
SubSystem = &SubSystems[Index];
|
||||||
if(strcmp(SubSystem->Name, Name) == 0)
|
if(strcasecmp(SubSystem->Name, Name) == 0)
|
||||||
{
|
{
|
||||||
/* Subsystem found, return its ID */
|
/* Subsystem found, return its ID */
|
||||||
return SubSystem->Identifier;
|
return SubSystem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No valid subsystem found */
|
/* No valid subsystem found */
|
||||||
return 0x00;
|
return &SubSystems[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
char *getSubSystemName(int Identifier)
|
||||||
|
{
|
||||||
|
int Index;
|
||||||
|
int SubSystemsCount;
|
||||||
|
PPE_SUBSYSTEM SubSystem;
|
||||||
|
|
||||||
|
/* Count number of subsystems avaialble */
|
||||||
|
SubSystemsCount = sizeof(SubSystems) / sizeof(PE_SUBSYSTEM);
|
||||||
|
|
||||||
|
/* Find subsystem */
|
||||||
|
for(Index = 0; Index < SubSystemsCount; Index++)
|
||||||
|
{
|
||||||
|
SubSystem = &SubSystems[Index];
|
||||||
|
if(SubSystem->Identifier == Identifier)
|
||||||
|
{
|
||||||
|
/* Subsystem found, return its ID */
|
||||||
|
return SubSystem->Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No valid subsystem found */
|
||||||
|
return SubSystems[0].Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -67,7 +92,7 @@ int main(int argc, char *argv[])
|
|||||||
unsigned char Signature[4];
|
unsigned char Signature[4];
|
||||||
unsigned int HeaderOffset;
|
unsigned int HeaderOffset;
|
||||||
unsigned short SubSystem;
|
unsigned short SubSystem;
|
||||||
int NewSubSystem;
|
PPE_SUBSYSTEM NewSubSystem;
|
||||||
|
|
||||||
/* Check for proper number of arguments */
|
/* Check for proper number of arguments */
|
||||||
if(argc != 3)
|
if(argc != 3)
|
||||||
@ -113,11 +138,11 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Read the current SubSystem value */
|
/* Read the current SubSystem value */
|
||||||
fread(&SubSystem, sizeof(unsigned short), 1, ExeFile);
|
fread(&SubSystem, sizeof(unsigned short), 1, ExeFile);
|
||||||
printf("Original SubSystem: 0x%04X\n", SubSystem);
|
printf("Original SubSystem: 0x%04X <%s>\n", SubSystem, getSubSystemName(SubSystem));
|
||||||
|
|
||||||
/* Parse the new SubSystem value from the command line argument */
|
/* Parse the new SubSystem value from the command line argument */
|
||||||
NewSubSystem = getSubSystemID(argv[2]);
|
NewSubSystem = getSubSystem(argv[2]);
|
||||||
if(NewSubSystem == 0)
|
if(NewSubSystem->Identifier == 0)
|
||||||
{
|
{
|
||||||
/* Invalid SubSystem provided */
|
/* Invalid SubSystem provided */
|
||||||
printf("Error: %s is not a valid PE SubSystem\n", argv[2]);
|
printf("Error: %s is not a valid PE SubSystem\n", argv[2]);
|
||||||
@ -125,13 +150,13 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Print new SubSystem identifier */
|
/* Print new SubSystem identifier */
|
||||||
printf("New SubSystem: 0x%04X\n", NewSubSystem);
|
printf("New SubSystem: 0x%04X <%s>\n", NewSubSystem->Identifier, NewSubSystem->Name);
|
||||||
|
|
||||||
/* Seek back to the SubSystem field in the optional header */
|
/* Seek back to the SubSystem field in the optional header */
|
||||||
fseek(ExeFile, -sizeof(unsigned short), SEEK_CUR);
|
fseek(ExeFile, -sizeof(unsigned short), SEEK_CUR);
|
||||||
|
|
||||||
/* Write the new SubSystem value */
|
/* Write the new SubSystem value */
|
||||||
fwrite(&NewSubSystem, sizeof(unsigned short), 1, ExeFile);
|
fwrite(&NewSubSystem->Identifier, sizeof(unsigned short), 1, ExeFile);
|
||||||
|
|
||||||
/* Close the file */
|
/* Close the file */
|
||||||
fclose(ExeFile);
|
fclose(ExeFile);
|
||||||
|
Loading…
Reference in New Issue
Block a user