Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Rewrite binpatch(8) utility to add support for ELF binaries,
details: https://anonhg.NetBSD.org/src/rev/079bfe79f1e1
branches: trunk
changeset: 746815:079bfe79f1e1
user: tsutsui <tsutsui%NetBSD.org@localhost>
date: Thu Aug 20 15:14:49 2009 +0000
description:
Rewrite binpatch(8) utility to add support for ELF binaries,
using implementation of old src/usr.sbin/mdsetimage sources
which supports misc executable formats without LGPL'ed libbfd.
No particular comments on port-atari@.
XXX1: amiga also has the similar utility in amiga/stand/binpatch
but it has slightly different options.
XXX2: Is it worth to put this utility into MI src/usr.sbin to patch
rtc_offset etc. in GENERIC kernel binaries in distribution?
diffstat:
share/man/man8/man8.atari/binpatch.8 | 74 +++-
sys/arch/atari/stand/binpatch/Makefile | 53 ++-
sys/arch/atari/stand/binpatch/binpatch.c | 505 +++++++++++++++++++-----------
3 files changed, 430 insertions(+), 202 deletions(-)
diffs (truncated from 747 to 300 lines):
diff -r d2a3cf59105b -r 079bfe79f1e1 share/man/man8/man8.atari/binpatch.8
--- a/share/man/man8/man8.atari/binpatch.8 Thu Aug 20 14:43:06 2009 +0000
+++ b/share/man/man8/man8.atari/binpatch.8 Thu Aug 20 15:14:49 2009 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: binpatch.8,v 1.5 2001/12/26 01:26:44 wiz Exp $
+.\" $NetBSD: binpatch.8,v 1.6 2009/08/20 15:14:49 tsutsui Exp $
.\"
.\" Copyright (c) 1994 Christian E. Hopps
.\" All rights reserved.
@@ -28,22 +28,24 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd February 2, 1994
+.Dd August 20, 2009
.Dt BINPATCH 8 atari
.Os
.Sh NAME
.Nm binpatch
-.Nd "examine and or modify initialized data in a binary file"
+.Nd "examine and or modify initialized data in an executable binary"
.Sh SYNOPSIS
.Nm binpatch
-.Op Fl b | Fl w | Fl l
+.Op Fl b | Fl w | Fl l | Fl d
.Op Fl o Ar offset
+.Op Fl T Ar saddr
.Fl s Ar symname
.Op Fl r Ar value
.Ar binfile
.Nm binpatch
-.Op Fl b | Fl w | Fl l
+.Op Fl b | Fl w | Fl l | Fl d
.Op Fl o Ar offset
+.Op Fl T Ar saddr
.Fl a Ar addr
.Op Fl r Ar value
.Ar binfile
@@ -52,20 +54,39 @@
is used to modify or examine the data associated with a symbol in a binary
file
.Ar binfile .
+.Pp
The flags
.Fl b ,
+.Fl w ,
+.Fl l ,
+and
+.Fl d
+specify the size of the data to be modified or examined.
+.Fl b
+is for 8bit
+.Pq Li int8_t ,
.Fl w
-and
+is for 16bit
+.Pq Li int16_t ,
.Fl l
-specify the size of the data to be modified or examined
-(byte, word and long respectively.) The
+is for 32bit
+.Pq Li int32_t ,
+and
+.Fl d
+is for 64bit
+.Pq Li int64_t
+variables.
+.Pp
+The
.Ar binfile
is scanned in search of the symbol
.Ar symname
(specified with the
.Fl s
flag.)
-If the symbol is found the current data and address are printed. Next if the
+If the symbol is found the current data and address are printed.
+.Pp
+Next if the
.Fl r
flag has been given, the current data is replaced with that of
.Ar value .
@@ -79,11 +100,17 @@
.Pp
The
.Fl o
-flag specifies an offset in byte, word or long
+flag specifies an offset in
+.Li int8_t ,
+.Li int16_t ,
+.Li int32_t ,
+and
+.Li int64_t
.Fl ( b ,
.Fl w ,
+.Fl l ,
or
-.Fl l )
+.Fl d )
units from the given locator
.Fl ( s
or
@@ -91,3 +118,28 @@
for
.Nm
to perform its described actions.
+This might be useful to patch a member of array or structure.
+.Pp
+The
+.Fl T
+flag is used to specify the starting address of a.out binary text segment.
+Ignored for other binary executable formats.
+.Sh SEE ALSO
+.Xr gdb 1 ,
+.Xr mdsetimage 8
+.Sh BUGS
+The
+.Nm
+command doesn't check if size of specified symbol is same with the
+specified size by
+.Fl b ,
+.Fl w ,
+.Fl l ,
+or
+.Fl d
+flag.
+.Pp
+The
+.Nm
+command doesn't check if specified address or symbol is a patchable variable
+and it might corrupts the specified executable binary.
diff -r d2a3cf59105b -r 079bfe79f1e1 sys/arch/atari/stand/binpatch/Makefile
--- a/sys/arch/atari/stand/binpatch/Makefile Thu Aug 20 14:43:06 2009 +0000
+++ b/sys/arch/atari/stand/binpatch/Makefile Thu Aug 20 15:14:49 2009 +0000
@@ -1,9 +1,50 @@
-# $NetBSD: Makefile,v 1.5 2001/12/12 01:49:38 tv Exp $
+# $NetBSD: Makefile,v 1.6 2009/08/20 15:14:49 tsutsui Exp $
+
+BINDIR?= /sbin
+WARNS?= 4
+
+PROG= binpatch
+SRCS= binpatch.c
+SRCS+= exec_aout.c exec_ecoff.c exec_elf32.c exec_elf64.c exec_coff.c
+
+#MAN= binpatch.8 # currently it's in src/share/man/man8/man8.atari
+NOMAN=
+
+MDSETIMAGE=${NETBSDSRCDIR}/usr.sbin/mdsetimage
+CPPFLAGS+= -I${MDSETIMAGE}
+.PATH: ${MDSETIMAGE}
+
+.include <bsd.own.mk> # for ${MACHINE_CPU}
-PROG=binpatch
-NOMAN= # defined
-
-BINDIR=/sbin
-LDFLAGS+=-static
+.if ${MACHINE_ARCH} == "alpha"
+CPPFLAGS+=-DNLIST_ECOFF
+CPPFLAGS+=-DNLIST_ELF64
+.elif ${MACHINE_CPU} == "mips"
+CPPFLAGS+=-DNLIST_ECOFF
+CPPFLAGS+=-DNLIST_ELF32
+CPPFLAGS+=-DNLIST_AOUT
+.elif ${MACHINE_ARCH} == "powerpc"
+CPPFLAGS+=-DNLIST_ELF32
+.elif ${MACHINE_ARCH} == "m68k" || \
+ ${MACHINE_ARCH} == "m68000" || \
+ ${MACHINE_ARCH} == "vax" || \
+ ${MACHINE_CPU} == "arm"
+CPPFLAGS+=-DNLIST_ELF32
+CPPFLAGS+=-DNLIST_AOUT
+.elif ${MACHINE_CPU} == "sh3"
+CPPFLAGS+=-DNLIST_COFF
+CPPFLAGS+=-DNLIST_ELF32
+.elif ${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64" || \
+ ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
+CPPFLAGS+=-DNLIST_ELF64
+CPPFLAGS+=-DNLIST_ELF32
+CPPFLAGS+=-DNLIST_AOUT
+.else
+#CPPFLAGS+=-DNLIST_AOUT
+#CPPFLAGS+=-DNLIST_ECOFF
+CPPFLAGS+=-DNLIST_ELF32
+#CPPFLAGS+=-DNLIST_ELF64
+#CPPFLAGS+=-DNLIST_COFF
+.endif
.include <bsd.prog.mk>
diff -r d2a3cf59105b -r 079bfe79f1e1 sys/arch/atari/stand/binpatch/binpatch.c
--- a/sys/arch/atari/stand/binpatch/binpatch.c Thu Aug 20 14:43:06 2009 +0000
+++ b/sys/arch/atari/stand/binpatch/binpatch.c Thu Aug 20 15:14:49 2009 +0000
@@ -1,8 +1,7 @@
-/* $NetBSD: binpatch.c,v 1.5 2009/03/14 21:04:07 dsl Exp $ */
+/* $NetBSD: binpatch.c,v 1.6 2009/08/20 15:14:49 tsutsui Exp $ */
-/*
- * Copyright (c) 1994 Christian E. Hopps
- * All rights reserved.
+/*-
+ * Copyright (c) 2009 Izumi Tsutsui. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -12,11 +11,6 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christian E. Hopps.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
@@ -30,211 +24,352 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * Copyright (c) 1996 Christopher G. Demetriou
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * <<Id: LICENSE_GC,v 1.1 2001/10/01 23:24:05 cgd Exp>>
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1996\
+ Christopher G. Demetriou. All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+__RCSID("$NetBSD: binpatch.c,v 1.6 2009/08/20 15:14:49 tsutsui Exp $");
+#endif /* not lint */
+
#include <sys/types.h>
-#include <a.out.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/inttypes.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <nlist.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdbool.h>
+#include <unistd.h>
-extern char *optarg;
-extern int optind;
+#include "extern.h"
+
+int main(int, char *[]);
+static void usage(void) __dead;
-void error (char *) __attribute__((__noreturn__));
+bool replace, verbose;
+u_long addr, offset;
+char *symbol;
+size_t size;
+uint64_t val;
+
+#ifdef NLIST_AOUT
+/*
+ * Since we can't get the text address from an a.out executable, we
+ * need to be able to specify it. Note: there's no way to test to
+ * see if the user entered a valid address!
+ */
+int T_flag_specified; /* the -T flag was specified */
+u_long text_start; /* Start of kernel text */
+#endif /* NLIST_AOUT */
Home |
Main Index |
Thread Index |
Old Index