有没有人能够创建PE COFF和ELF的混合体?

有没有人能够创建PE COFF和ELF的混合体?,第1张

有没有人能够创建PE COFF和ELF的混合体?

这是不可能的,因为两种类型的格式有冲突:

  • PE文件的开头两个字符必须是
    'M' 'Z'
    ;
  • ELF文件的开头四个字符必须为
    'x7f' 'E' 'L' 'F'

显然,您不能创建一个可以同时满足两种格式的文件。


回应有关多语言二进制文件同时作为16位COM文件和Linux
ELF文件都有效的评论,这是有可能的(尽管COM文件实际上是DOS程序,而不是Windows,当然不是Win32)。

这是我一起敲的-用NASM编译。之所以起作用,是因为ELF文件(

'x7f' 'E'
)的前两个字节恰好也是有效的8086机器代码(45字节的相对于if-
大于-大于的指令跳转)。最小的ELF标头来自Brian
Raiter

BITS 32ORG 0x08048000  ehdr:     ; Elf32_Ehdr     db      0x7F, "ELF", 1, 1, 1, 0         ;   e_ident        times 8 db      0     dw      2         ;   e_type     dw      3         ;   e_machine     dd      1         ;   e_version     dd      _start    ;   e_entry     dd      phdr - $$ ;   e_phoff     dd      0         ;   e_shoff     dd      0         ;   e_flags     dw      ehdrsize  ;   e_ehsize     dw      phdrsize  ;   e_phentsize     dw      1         ;   e_phnum     dw      0         ;   e_shentsize     dw      0         ;   e_shnum     dw      0         ;   e_shstrndx  ehdrsize      equ     $ - ehdrtimes 0x47-($-$$) db    0; DOS COM File preBITS 16    mov dx, msg1 - $$ + 0x100    mov ah, 0x09    int 0x21    mov ah, 0x00    int 0x21  msg1:         db      `Hello World (DOS).rn$`BITS 32  phdr:     ; Elf32_Phdr     dd      1         ;   p_type     dd      0         ;   p_offset     dd      $$        ;   p_vaddr     dd      $$        ;   p_paddr     dd      filesize  ;   p_filesz     dd      filesize  ;   p_memsz     dd      5         ;   p_flags     dd      0x1000    ;   p_align  phdrsize      equ     $ - phdr; Linux ELF pre  _start:    mov eax, 4      ; SYS_write    mov ebx, 1      ; stdout    mov ecx, msg2    mov edx, msg2_len    int 0x80    mov eax, 1      ; SYS_exit    mov ebx, 0    int 0x80  msg2:         db      `Hello World (Linux).n`  msg2_len      equ     $ - msg2  filesize      equ     $ - $$


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5046431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存