2017-02-16 8 views
-1

.text/.codeセクションが1つしかない.exe(PE実行可能ファイル)を手動で作成するプログラムを作成しました。しかし、私が開くたびに、それは次のエラー "このアプリはあなたのPCで実行することはできません"をスローします。なぜそれはそのエラーを投げるのですか?データを間違って埋めるか、何かを逃したからですか?手作業で作成した.exeエラー "このアプリケーションはPCで実行できません"

ここにコードがあります(これは基本的なもので、ほとんどの値はハードコードされています)。私が何らかの価値を間違えていたら教えてください。 PEファイルフォーマットの詳細:(なし64ビットDOSプログラムが存在しない)link

#include<stdio.h> 

int main(){ 

    char DOS_MESSAGE[] = {14,31,186,14,0,180,9,205,33,184,1,76, 
     205,33,84,104,105,115,32,112,114,111,103,114,97,109,32,99,97,110,110, 
     111,116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32,109,111, 
     100,101,46,13,13,10,36,0,0,0,0,0,0,0}; 
    char CODE_RAW[] = {85,72,139,5,184,19,0,0}; 

    int PAD = 0; 
    int i = 0; 

    struct data_directory 
    { 
     long VirtualAddress; 
     long Size; 
    }; 

    struct DOS_Header 
    { 
     char signature[2]; 
     short lastsize; 
     short nblocks; 
     short nreloc; 
     short hdrsize; 
     short minalloc; 
     short maxalloc; 
     short ss; 
     short sp; 
     short checksum; 
     short ip; 
     short cs; 
     short relocpos; 
     short noverlay; 
     short reserved1[4]; 
     short oem_id; 
     short oem_info; 
     short reserved2[10]; 
     long e_lfanew; 
    }; 

    struct PE_Header{ 
     char signature[4]; 
    }; 


    struct COFFHeader 
    { 
     short Machine; 
     short NumberOfSections; 
     long TimeDateStamp; 
     long PointerToSymbolTable; 
     long NumberOfSymbols; 
     short SizeOfOptionalHeader; 
     short Characteristics; 
    }; 

    struct PEOptHeader 
    { 

     short signature; 
     char MajorLinkerVersion; 
     char MinorLinkerVersion; 
     long SizeOfCode; 
     long SizeOfInitializedData; 
     long SizeOfUninitializedData; 
     long AddressOfEntryPoint; 
     long BaseOfCode; 
     long BaseOfData; 
     long ImageBase; 
     long SectionAlignment; 
     long FileAlignment; 
     short MajorOSVersion; 
     short MinorOSVersion; 
     short MajorImageVersion; 
     short MinorImageVersion; 
     short MajorSubsystemVersion; 
     short MinorSubsystemVersion; 
     long Win32VersionValue; 
     long SizeOfImage; 
     long SizeOfHeaders; 
     long Checksum; 
     short Subsystem; 
     short DLLCharacteristics; 
     long SizeOfStackReserve; 
     long SizeOfStackCommit; 
     long SizeOfHeapReserve; 
     long SizeOfHeapCommit; 
     long LoaderFlags; 
     long NumberOfRvaAndSizes; 
     struct data_directory DataDirectory[16];  
    };    

struct SECTION{ 
    char SectionName[8]; 
    long VirtualSize; 
    long VirtualAddress; 
    long SizeOfRawData; 
    long PointerToRawData; 
    long PointerToRelocations; 
    long PointerToLineNumbers; 
    short NumberOfRealocations; 
    short NumberOfLineNumbers; 
    long Characteristics; 
}; 


FILE *pfile = NULL; 
struct DOS_Header DOSHEADER,*PTRDOSHEADER = NULL; 
struct PE_Header PEHEADER,*PTRPEHEADER = NULL; 
struct COFFHeader COFFHEADER, *PTRCOFFHEADER = NULL; 
struct PEOptHeader PEOPTHEADER, *PTRPEOPTHEADER = NULL; 
struct SECTION CODE,*PCODE = NULL; 

DOSHEADER.signature[0] = 'M'; 
DOSHEADER.signature[1] = 'Z'; 
DOSHEADER.lastsize = 144; 
DOSHEADER.nblocks = 3; 
DOSHEADER.nreloc = 0; 
DOSHEADER.hdrsize = 4; 
DOSHEADER.minalloc = 0; 
DOSHEADER.maxalloc = 65535; 
DOSHEADER.ss = 0; 
DOSHEADER.sp = 0; 
DOSHEADER.checksum = 0; 
DOSHEADER.ip = 0; 
DOSHEADER.cs = 0; 
DOSHEADER.reserved1[0] = 0; 
DOSHEADER.reserved1[1] = 0; 
DOSHEADER.reserved1[2] = 0; 
DOSHEADER.reserved1[3] = 0; 
DOSHEADER.oem_id = 0; 
DOSHEADER.oem_info = 0; 
DOSHEADER.reserved2[0] = 0; 
DOSHEADER.reserved2[1] = 0; 
DOSHEADER.reserved2[2] = 0; 
DOSHEADER.reserved2[3] = 0; 
DOSHEADER.reserved2[4] = 0; 
DOSHEADER.reserved2[5] = 0; 
DOSHEADER.reserved2[6] = 0; 
DOSHEADER.reserved2[7] = 0; 
DOSHEADER.reserved2[8] = 0; 
DOSHEADER.reserved2[9] = 0; 
DOSHEADER.e_lfanew = 0; 



PEHEADER.signature[0] = 'P'; 
PEHEADER.signature[1] = 'E'; 
PEHEADER.signature[2] = '\0'; 
PEHEADER.signature[3] = '\0'; 

COFFHEADER.Machine = 332; 
COFFHEADER.NumberOfSections = 1; 
COFFHEADER.TimeDateStamp = 1484783481; 
COFFHEADER.PointerToSymbolTable = 0; 
COFFHEADER.NumberOfSymbols = 0; 
COFFHEADER.SizeOfOptionalHeader = sizeof(struct PEOptHeader); 
COFFHEADER.Characteristics = 2; 

PEOPTHEADER.signature = 267; 
PEOPTHEADER.MajorLinkerVersion = 2; 
PEOPTHEADER.MinorLinkerVersion = 18; 
PEOPTHEADER.SizeOfCode = sizeof(CODE); 
PEOPTHEADER.SizeOfInitializedData = 0; 
PEOPTHEADER.SizeOfUninitializedData = 0; 
PEOPTHEADER.AddressOfEntryPoint = 4096; 
PEOPTHEADER.BaseOfCode = 4096; 
PEOPTHEADER.BaseOfData = 0; 
PEOPTHEADER.ImageBase = 4194304; 
PEOPTHEADER.SectionAlignment = 4096; 
PEOPTHEADER.FileAlignment = 512; 
PEOPTHEADER.MajorOSVersion = 1; 
PEOPTHEADER.MinorOSVersion = 0; 
PEOPTHEADER.MajorImageVersion = 1; 
PEOPTHEADER.MinorImageVersion = 0; 
PEOPTHEADER.MajorSubsystemVersion = 4; 
PEOPTHEADER.MinorSubsystemVersion = 0; 
PEOPTHEADER.Win32VersionValue = 0; 
PEOPTHEADER.SizeOfImage = 1024 + sizeof(CODE_RAW); 
PEOPTHEADER.SizeOfHeaders = sizeof(PEHEADER) + sizeof(COFFHEADER) + sizeof(PEOPTHEADER); 
PEOPTHEADER.Checksum = 0; 
PEOPTHEADER.Subsystem = 3; 
PEOPTHEADER.DLLCharacteristics = 0; 
PEOPTHEADER.SizeOfStackReserve = 1048576; 
PEOPTHEADER.SizeOfStackCommit = 4096; 
PEOPTHEADER.SizeOfHeapReserve = 1048576; 
PEOPTHEADER.SizeOfHeapCommit = 4096; 
PEOPTHEADER.LoaderFlags = 0; 
PEOPTHEADER.NumberOfRvaAndSizes = 16; 

PEOPTHEADER.DataDirectory[0].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[0].Size = 0; 

PEOPTHEADER.DataDirectory[1].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[1].Size = 0; 

PEOPTHEADER.DataDirectory[2].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[2].Size = 0; 

PEOPTHEADER.DataDirectory[3].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[3].Size = 0; 

PEOPTHEADER.DataDirectory[4].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[4].Size = 0; 

PEOPTHEADER.DataDirectory[5].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[5].Size = 0; 

PEOPTHEADER.DataDirectory[6].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[6].Size = 0; 

PEOPTHEADER.DataDirectory[7].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[7].Size = 0; 

PEOPTHEADER.DataDirectory[8].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[8].Size = 0; 

PEOPTHEADER.DataDirectory[9].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[9].Size = 0; 

PEOPTHEADER.DataDirectory[10].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[10].Size = 0; 

PEOPTHEADER.DataDirectory[11].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[11].Size = 0; 

PEOPTHEADER.DataDirectory[12].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[12].Size = 0; 

PEOPTHEADER.DataDirectory[13].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[13].Size = 0; 

PEOPTHEADER.DataDirectory[14].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[14].Size = 0; 

PEOPTHEADER.DataDirectory[15].VirtualAddress = 0; 
PEOPTHEADER.DataDirectory[15].Size = 0; 




CODE.SectionName[0] = 46; 
CODE.SectionName[1] = 116; 
CODE.SectionName[2] = 101; 
CODE.SectionName[3] = 120; 
CODE.SectionName[4] = 116; 
CODE.SectionName[5] = 0; 
CODE.SectionName[6] = 0; 
CODE.SectionName[7] = 0; 

CODE.VirtualSize = sizeof(CODE_RAW); 
CODE.VirtualAddress = PEOPTHEADER.BaseOfCode; 
CODE.SizeOfRawData = sizeof(CODE_RAW); 
CODE.PointerToRawData = 1024; 
CODE.PointerToRelocations = 0; 
CODE.PointerToLineNumbers = 0; 
CODE.NumberOfRealocations = 0; 
CODE.NumberOfLineNumbers = 0; 
CODE.Characteristics = 1615855712; 




PTRDOSHEADER = &DOSHEADER; 
PTRPEHEADER = &PEHEADER; 
PTRCOFFHEADER = &COFFHEADER; 
PTRPEOPTHEADER = &PEOPTHEADER; 
PCODE = &CODE; 




pfile = fopen("ZETA.exe","wb"); 
if(pfile == NULL){ 
    printf("Error Creating File!\n"); 
} 
else{ 
    fwrite(PTRDOSHEADER,sizeof(DOSHEADER),1,pfile); 
    fwrite(DOS_MESSAGE,sizeof(char),sizeof(DOS_MESSAGE),pfile); 
    fwrite(PTRPEHEADER,sizeof(PEHEADER),1,pfile); 
    fwrite(PTRCOFFHEADER,sizeof(COFFHEADER),1,pfile); 
    fwrite(PTRPEOPTHEADER,sizeof(PEOPTHEADER),1,pfile); 
    fwrite(PCODE,sizeof(CODE),1,pfile); 
    for(i=0; i < 1024 - (sizeof(DOSHEADER)+sizeof(DOS_MESSAGE)+sizeof(PEHEADER)+sizeof(COFFHEADER)+sizeof(PEOPTHEADER)+sizeof(CODE));i++){ 
     fwrite(&PAD,sizeof(char),1,pfile); 
     } 
    fwrite(CODE_RAW,sizeof(char),sizeof(CODE_RAW),pfile); 

    fclose(pfile); 
    } 

    return 0; 

} 
+1

誰かがそれを読んで、あなたに回線番号を教えてくれると思いますか? –

+0

あなたのヘッダーを "実際の" exeのヘッダーと比較して、何が違うかを調べることをお勧めします。 – immibis

答えて

関連する問題