Alexandre:

When the PE file is generate in EXE have just the "M" of "MZ"...

Let's try again, is this better?


import std.c.windows.windows: WORD, LONG;

struct IMAGE_DOS_HEADER {
    WORD e_magic = ('M' << 8) + 'Z',
         e_cblp,
         e_cp,
         e_crlc,
         e_cparhdr,
         e_minalloc,
         e_maxalloc,
         e_ss,
         e_sp,
         e_csum,
         e_ip,
         e_cs,
         e_lfarlc,
         e_ovno;

    WORD[4] e_res;
    WORD e_oemid,
         e_oeminfo;

    WORD[10] e_res2;
    LONG e_lfanew;
}

alias PIMAGE_DOS_HEADER = IMAGE_DOS_HEADER*;

__gshared ubyte[0x800] image;

void main() {
    import std.stdio;
    import core.stdc.string;

    auto dosh = cast(PIMAGE_DOS_HEADER)image.ptr;

    immutable stub = x"b8 01 4c cd 21";
    memcpy(&image[IMAGE_DOS_HEADER.sizeof],
           stub.ptr, stub.length);
}


Bye,
bearophile

Reply via email to