[Thema] Exe vergrößern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von eRza, 12. September 2008 .

Schlagworte:
  1. 12. September 2008
    Exe vergrößern

    Hallo,

    ich suche nach einer möglichkeit einer exe datei einfach zu vergrößern.

    Im endeffekt soll nichts geändert werden, die exe soll noch funktionsfähig sien etc, nur größer.

    danke
     
  2. 12. September 2008
    AW: Exe vergrößern

    am ende der exe datei kannst du soviel datenmüll hinmachen wie du willst.
    hexeditor -> ganz runter scrollen -> einfügen was und wieviel du willst.
     
  3. 12. September 2008
    AW: Exe vergrößern

    irgend nen schrott als ressource einbinden. ein großes bild, oä
     
  4. 12. September 2008
    AW: Exe vergrößern

    Das gehört doch eigentlich nicht zu Programmierung, oder?
     
  5. 12. September 2008
    AW: Exe vergrößern

    mh doch schon.
     
  6. 12. September 2008
    AW: Exe vergrößern

    wie schon gesagt wurde, funktionsirrelevante daten kannste am ende des codes immer anhängen, aber darf man fragen was der sinn des ganzen is? speicherverschwendung? ^^
     
  7. 12. September 2008
    AW: Exe vergrößern

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #ifdef _WIN32
    # pragma warning( disable: 4996 )
    #endif
    
    typedef enum
    {
     false = 0,
     true,
    } bool;
    
    typedef long long int int64;
    
    typedef struct _Opts
    {
     int64 size;
     bool insert;
     char* input;
     char* output;
     int64 input_size;
     int64 input_addr;
    } Opts;
    
    bool init_env ( int argc, char **argv );
    void clean_env ( void );
    void write_file ( void );
    int64 get_file_size ( const char* file );
    bool file_exists ( const char* file );
    
    Opts g_Opts = {0};
    
    int main( int argc, char **argv )
    {
     if( false == init_env( argc, argv ) )
     {
     printf( "%s: You need to set at least 1 Parameter.\n"\
     "%s [options] <output.img>\n\nOptions:\n"\
     "\t-size <image_size>\n"\
     "\t-insert <src.bin> <src insert at address>\n", *argv, *argv );
     
     goto prg_end;
     }
     
     printf( "Writing %s with a size of %f MB\n", g_Opts.output, (float)((float)g_Opts.size/1024.0f)/1024.0f );
     
     if( true == g_Opts.insert )
     {
     printf( "Writing %s into %s at position %d\n", g_Opts.input, g_Opts.output, g_Opts.input_addr );
     }
     
     write_file();
     
     printf( "File Written\n" );
     
     clean_env();
     
     prg_end:
     return 0;
    }
    
    bool init_env( int argc, char **argv )
    {
     int argi = 0;
     bool size = false;
     
     if( argc < 2 )
     {
     return false;
     }
     
     g_Opts.insert = false;
     g_Opts.input = NULL;
     g_Opts.output = strdup(argv[argc-1]);
     g_Opts.input_addr = 0;
     g_Opts.size = 0;
     
     for( argi=0; argi<argc; argi++ )
     {
     if( 0 == strcmp( argv[argi], "-size" ) )
     {
     if( (argc-(argi+1)) < 1 )
     {
     return false;
     }
     
     g_Opts.size = atoi( argv[++argi] );
     size = true;
     }
     
     if( 0 == strcmp( argv[argi], "-insert" ) )
     {
     if( (argc-(argi+2)) < 1 )
     {
     return false;
     }
     
     g_Opts.insert = true;
     g_Opts.input = strdup( argv[++argi] );
     g_Opts.input_addr = atoi( argv[++argi] );
     }
     
     if( 0 == strcmp( argv[argi], "-help" ) || 
     0 == strcmp( argv[argi], "-h" ) )
     {
     printf( "%s [options] <output.img>\n\nOptions:\n"\
     "\t-size <image_size>\n"\
     "\t-insert <src.bin> <src insert at address>\n", *argv );
     exit(0);
     }
     }
     
     if( size == false )
     {
     g_Opts.size = 1474560;//1509949;
     }
     
     if( true == g_Opts.insert )
     { 
     if( false == file_exists( g_Opts.input ) )
     {
     g_Opts.insert = false;
     free( g_Opts.input );
     g_Opts.input = NULL;
     }
     else
     {
     g_Opts.input_size = get_file_size( g_Opts.input );
     
     if( g_Opts.size < g_Opts.input_size )
     {
     g_Opts.insert = false;
     free( g_Opts.input );
     g_Opts.input = NULL;
     }
     }
     }
     
     return true;
    }
    
    int64 get_file_size ( const char* file )
    {
     int64 size = 0;
     int pos = 0;
     FILE* descr = fopen( file, "r" );
     
     pos = ftell( descr );
     fseek( descr, 0, SEEK_END );
     size = ftell( descr );
     fseek( descr, pos, SEEK_SET );
     fclose( descr );
     
     return size;
    }
    
    void write_file ( void )
    {
     int64 size = 0;
     int64 inputsize = 0;
     char write = 0;
     FILE* destDescr = fopen( g_Opts.output, "wb" ); 
     FILE* inputDescr = NULL; 
     
     if( true == g_Opts.insert )
     {
     inputDescr = fopen( g_Opts.input, "rb" );
     }
     
     for( size = 0; size < g_Opts.size; size++ )
     { 
     if( true == g_Opts.insert 
     && size >= g_Opts.input_addr
     && inputsize < g_Opts.input_size )
     {
     fseek( inputDescr, inputsize, SEEK_SET );
     write = fgetc( inputDescr );
     
     //printf( "Writing at 0x%x\n", size );
     fwrite( &write, 1, 1, destDescr );
     
     inputsize++;
     }
     else
     {
     fputc( 0x00, destDescr );
     }
     }
     
     if( true == g_Opts.insert )
     {
     fclose( inputDescr );
     }
     
     fclose( destDescr );
    }
    
    void clean_env( void )
    {
     if( true == g_Opts.insert )
     {
     if( g_Opts.input != NULL )
     {
     free( g_Opts.input );
     }
     }
     
     if( g_Opts.output != NULL )
     {
     free( g_Opts.output );
     }
    }
    
    bool file_exists ( const char* file )
    {
     bool exists = true;
     FILE *descr = fopen( file, "r" );
     
     if( NULL == descr ) 
     {
     exists = false;
     }
     else
     {
     fclose( descr );
     }
     
     return exists;
    }
    Kompilieren. Benutzen:
    bla.exe -insert deine_zu_vergrößernde.exe 0 -size einegrößeinbytes irgendeinname.exe

    Hab ich zum Erstellen für Floppy Images geschrieben, scheint hier aber auch für zu passen.
     
  8. 12. September 2008
    AW: Exe vergrößern

    geht auch einfach per batch:

    for %%x in (*.exe) do echo.>> %%x

    allerdings zeitaufwändig, da jedesmal nur die bytes "0D 0A" angehängt werden.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.