git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2196 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			175 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| Copyright (c)  2004-2006 Intel Corporation. All rights reserved
 | |
| This program and the accompanying materials are licensed and made available
 | |
| under the terms and conditions of the BSD License which accompanies this
 | |
| distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   Strip.c
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   Quick Exe2Bin equivalent.
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <memory.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #define UTILITY_NAME  "Strip"
 | |
| #define UTILITY_MAJOR_VERSION 1
 | |
| #define UTILITY_MINOR_VERSION 1
 | |
| 
 | |
| 
 | |
| void 
 | |
| Version(
 | |
|   void
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Print out version information for Strip.
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   None
 | |
|   
 | |
| Returns:
 | |
| 
 | |
|   None
 | |
|   
 | |
| --*/ 
 | |
| {
 | |
|   printf ("%s v%d.%d -EDK Utility to Convert EXE to BIN\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);
 | |
|   printf ("Copyright (c) 2005-2006 Intel Corporation. All rights reserved.\n");
 | |
| }
 | |
| 
 | |
| void 
 | |
| Usage(
 | |
|   void
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Print out usage information for Strip.
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   None
 | |
|   
 | |
| Returns:
 | |
| 
 | |
|   None
 | |
|   
 | |
| --*/ 
 | |
| {
 | |
|   Version();
 | |
|   printf ("\nUsage: %s InputFile OutputFile\n", UTILITY_NAME);
 | |
| }
 | |
| 
 | |
| int
 | |
| main (
 | |
|   int  argc,
 | |
|   char *argv[]
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Converts executable files to binary files.
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   argc   - Number of command line arguments
 | |
|   argv[] - Array of pointers to the command line arguments
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   Zero     - Function completed successfully.
 | |
|   Non-zero - Function exited with errors.
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   FILE  *InFile;
 | |
|   FILE  *OutFile;
 | |
|   int   Index;
 | |
|   int   FileSize;
 | |
|   char  *Buffer;
 | |
|   char  *Ptrx;
 | |
|   
 | |
|   if (argc == 1) {
 | |
|     Usage();
 | |
|     return -1;
 | |
|   }
 | |
|   
 | |
|   if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0) ||
 | |
|       (strcmp(argv[1], "-?") == 0) || (strcmp(argv[1], "/?") == 0)) {
 | |
|     Usage();
 | |
|     return 0;
 | |
|   }
 | |
|   
 | |
|   if ((strcmp(argv[1], "-V") == 0) || (strcmp(argv[1], "--version") == 0)) {
 | |
|     Version();
 | |
|     return 0;
 | |
|   }
 | |
|   
 | |
|   if (argc < 3) {
 | |
|     Usage();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   InFile  = fopen (argv[1], "rb");
 | |
|   OutFile = fopen (argv[2], "wb");
 | |
| 
 | |
|   if (!InFile) {
 | |
|     printf ("Unable to open input file, exit\n");
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   if (OutFile == NULL) {
 | |
|     printf ("Unable to open output file, exit.\n");
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   fseek (InFile, 0, SEEK_END);
 | |
|   FileSize = ftell (InFile);
 | |
| 
 | |
|   if (FileSize < 0x200) {
 | |
|     printf ("%d is not a legal file size, exit\n", FileSize);
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   fseek (InFile, 0, SEEK_SET);
 | |
| 
 | |
|   Buffer = (char *) malloc (FileSize);
 | |
|   if (Buffer == NULL) {
 | |
|     printf ("Error: Out of resources.\n");
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   fread (Buffer, 1, FileSize, InFile);
 | |
| 
 | |
|   Ptrx  = Buffer + 0x200;
 | |
| 
 | |
|   Index = FileSize - 0x200;
 | |
| 
 | |
|   fwrite (Ptrx, Index, 1, OutFile);
 | |
| 
 | |
|   fclose (InFile);
 | |
|   fclose (OutFile);
 | |
|   free (Buffer);
 | |
| 
 | |
|   return 0;
 | |
| }
 |