#include #include #include int main() { FILE *fp = fopen("hello", "w"); Elf32_Ehdr eh; Elf32_Phdr ph; memset(&eh, 0, sizeof(Elf32_Ehdr)); eh.e_ident[0] = 0x7f; eh.e_ident[1] = 'E'; eh.e_ident[2] = 'L'; eh.e_ident[3] = 'F'; eh.e_ident[4] = 'H'; eh.e_ident[5] = 'e'; eh.e_ident[6] = 'l'; eh.e_ident[7] = 'l'; eh.e_ident[8] = 'o'; eh.e_ident[9] = ' '; eh.e_ident[10] = 'w'; eh.e_ident[11] = 'o'; eh.e_ident[12] = 'r'; eh.e_ident[13] = 'l'; eh.e_ident[14] = 'd'; eh.e_ident[15] = '!'; eh.e_type = ET_EXEC; eh.e_machine = EM_386; // eh.e_version = EV_CURRENT; // can use eh.e_version = 0x0a1047c6; // eh.e_entry = 0x54-8-8; eh.e_entry = (char*)&eh.e_version - (char*)&eh.e_ident; eh.e_phoff = 52-8; // eh.e_shoff = 84; // can use // eh.e_flags = 0; // can use eh.e_shoff = 0x8d0d518d; eh.e_flags = 0xc1890441; eh.e_ehsize = 0x0eeb; eh.e_phentsize = 32; // eh.e_phnum = 1; // eh.e_shentsize = 0; // eh.e_shnum = 0; // eh.e_shstrndx = 0; ph.p_type = PT_LOAD; ph.p_offset = 0; ph.p_vaddr = 0; // ph.p_paddr = 0; // can use ph.p_paddr = 0x000aeb43; // can use ph.p_filesz = 76; ph.p_memsz = 76; // ph.p_flags = 7; // ph.p_align = 4096; fwrite(&eh, sizeof(Elf32_Ehdr)-8, 1, fp); fwrite(&ph, sizeof(Elf32_Phdr)-8, 1, fp); char buf[32]; buf[0] = 0xff; buf[1] = 0xcd; buf[2] = 0x80; buf[3] = 0x93; buf[4] = 0x31; buf[5] = 0xdb; buf[6] = 0xcd; buf[7] = 0x80; fwrite(buf, 8, 1, fp); fclose(fp); }