* New command dump
@ 2007-08-03 15:33 Bean
2007-08-04 9:49 ` Robert Millan
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Bean @ 2007-08-03 15:33 UTC (permalink / raw)
To: The development of GRUB 2
Hi,
I have written a new command dump, it can hex dump content of file or memory.
usage:
dump [-s skip] [-n length] { FILE | (mem) }
The output look just like command hexdump.
If you use (mem) as filename, it will dump physical memory instead of
file. when dumping memory, the default length is 256, but when dumping
normal file, the default length is the whole file.
Inside grub2, modules can call function dump directly:
void dump(unsigned long base,char* buf, int len);
--
Bean
2007-08-03 Bean <bean123ch@gmail.com>
* conf/common.rmk (pkgdata_MODULES): Add dump.mod.
(dump_mod_SOURCES): New variable.
(dump_mod_CFLAGS): Likewise.
(dump_mod_LDFLAGS): Likewise.
* include/grub/dump.h: New file.
* commands/dump.c: New file.
Index: conf/common.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/common.rmk,v
retrieving revision 1.16
diff -u -p -r1.16 common.rmk
--- conf/common.rmk 2 Aug 2007 19:12:52 -0000 1.16
+++ conf/common.rmk 3 Aug 2007 14:59:55 -0000
@@ -199,7 +199,7 @@ lvm_mod_LDFLAGS = $(COMMON_LDFLAGS)
pkgdata_MODULES += hello.mod boot.mod terminal.mod ls.mod \
cmp.mod cat.mod help.mod font.mod search.mod \
loopback.mod configfile.mod \
- terminfo.mod test.mod blocklist.mod
+ terminfo.mod test.mod blocklist.mod dump.mod
# For hello.mod.
hello_mod_SOURCES = hello/hello.c
@@ -276,6 +276,11 @@ blocklist_mod_SOURCES = commands/blockli
blocklist_mod_CFLAGS = $(COMMON_CFLAGS)
blocklist_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For blocklist.mod.
+dump_mod_SOURCES = commands/dump.c
+dump_mod_CFLAGS = $(COMMON_CFLAGS)
+dump_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# Misc.
pkgdata_MODULES += gzio.mod elf.mod
Index: include/grub/dump.h
===================================================================
RCS file: /sources/grub/grub2/include/grub/dump.h,v
diff -Nu include/grub/dump.h
--- /dev/null 2007-08-03 21:55:33.600000000 +0800
+++ include/grub/dump.h 2007-08-03 18:27:57.000000000 +0800
@@ -0,0 +1,25 @@
+/* dump.h - prototypes for dump */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_DUMP_H
+#define GRUB_DUMP_H 1
+
+void dump(unsigned long bse,char* buf,int len);
+
+#endif /* ! GRUB_DUMP_H */
Index: commands/dump.c
===================================================================
RCS file: /sources/grub/grub2/commands/dump.c,v
diff -Nu commands/dump.c
--- /dev/null 2007-08-03 21:55:33.600000000 +0800
+++ commands/dump.c 2007-08-03 23:00:48.000000000 +0800
@@ -0,0 +1,144 @@
+/* dump.c - command to dump the contents of a file or memory */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/arg.h>
+#include <grub/file.h>
+#include <grub/disk.h>
+#include <grub/misc.h>
+#include <grub/gzio.h>
+#include <grub/dump.h>
+
+static const struct grub_arg_option options[] = {
+ {"skip", 's', 0, "skip offset bytes from the beginning of file.", 0,
+ ARG_TYPE_INT},
+ {"length", 'n', 0, "read only length bytes", 0, ARG_TYPE_INT},
+ {0, 0, 0, 0, 0, 0}
+};
+
+void
+dump (unsigned long bse, char *buf, int len)
+{
+ int pos;
+ char line[80];
+
+ while (len > 0)
+ {
+ int cnt, i;
+
+ pos = grub_sprintf (line, "%08lx ", bse);
+ cnt = 16;
+ if (cnt > len)
+ cnt = len;
+
+ for (i = 0; i < cnt; i++)
+ {
+ pos += grub_sprintf (&line[pos], "%02x ", (unsigned char) buf[i]);
+ if ((i & 7) == 7)
+ line[pos++] = ' ';
+ }
+
+ for (; i < 16; i++)
+ {
+ pos += grub_sprintf (&line[pos], " ");
+ if ((i & 7) == 7)
+ line[pos++] = ' ';
+ }
+
+ line[pos++] = '|';
+
+ for (i = 0; i < cnt; i++)
+ line[pos++] = ((buf[i] >= 32) && (buf[i] < 127)) ? buf[i] : '.';
+
+ line[pos++] = '|';
+
+ line[pos] = 0;
+
+ grub_printf ("%s\n", line);
+
+ bse += 16;
+ buf += 16;
+ len -= cnt;
+ }
+}
+
+static grub_err_t
+grub_cmd_dump (struct grub_arg_list *state, int argc, char **args)
+{
+ grub_file_t file;
+ char buf[GRUB_DISK_SECTOR_SIZE];
+ grub_ssize_t size, length;
+ unsigned long skip;
+ int is_file;
+
+ if (argc != 1)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
+
+ skip = (state[0].set) ? grub_strtoul (state[0].arg, 0, 0) : 0;
+ length = (state[1].set) ? grub_strtoul (state[1].arg, 0, 0) : 0;
+
+ is_file = (grub_strcmp (args[0], "(mem)"));
+ if ((!is_file) && (!length))
+ length = 256;
+
+ if (is_file)
+ {
+ file = grub_gzfile_open (args[0], 1);
+ if (!file)
+ return 0;
+
+ file->offset = skip;
+
+ while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
+ {
+ unsigned long len;
+
+ len = ((length) && (size > length)) ? length : size;
+ dump (skip, buf, len);
+ skip += len;
+ if (length)
+ {
+ length -= len;
+ if (!length)
+ break;
+ }
+ }
+
+ grub_file_close (file);
+ }
+ else
+ dump (skip, (char *) skip, length);
+
+ return 0;
+}
+\f
+
+GRUB_MOD_INIT (dump)
+{
+ (void) mod; /* To stop warning. */
+ grub_register_command ("dump", grub_cmd_dump, GRUB_COMMAND_FLAG_BOTH,
+ "dump [ -s offset ] [-n length] { FILE | (mem) }",
+ "Dump the contents of a file or memory.", options);
+}
+
+GRUB_MOD_FINI (dump)
+{
+ grub_unregister_command ("dump");
+}
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-08-03 15:33 New command dump Bean
@ 2007-08-04 9:49 ` Robert Millan
2007-08-04 15:21 ` Bean
2007-08-05 18:39 ` Hollis Blanchard
2007-11-10 17:38 ` Marco Gerards
2 siblings, 1 reply; 8+ messages in thread
From: Robert Millan @ 2007-08-04 9:49 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Aug 03, 2007 at 11:33:38PM +0800, Bean wrote:
> Hi,
>
> I have written a new command dump, it can hex dump content of file or memory.
>
> usage:
>
> dump [-s skip] [-n length] { FILE | (mem) }
>
> The output look just like command hexdump.
I see that the output of hexdump is the same as "od -x". However, I find
"od -tx1" more useful. Maybe it would be better to do that instead?
--
Robert Millan
My spam trap is honeypot@aybabtu.com. Note: this address is only intended
for spam harvesters. Writing to it will get you added to my black list.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-08-04 9:49 ` Robert Millan
@ 2007-08-04 15:21 ` Bean
2007-08-05 9:58 ` Robert Millan
0 siblings, 1 reply; 8+ messages in thread
From: Bean @ 2007-08-04 15:21 UTC (permalink / raw)
To: The development of GRUB 2
On 8/4/07, Robert Millan <rmh@aybabtu.com> wrote:
> On Fri, Aug 03, 2007 at 11:33:38PM +0800, Bean wrote:
> > Hi,
> >
> > I have written a new command dump, it can hex dump content of file or memory.
> >
> > usage:
> >
> > dump [-s skip] [-n length] { FILE | (mem) }
> >
> > The output look just like command hexdump.
>
> I see that the output of hexdump is the same as "od -x". However, I find
> "od -tx1" more useful. Maybe it would be better to do that instead?
In my system, hexdump output look like this:
00000000 eb 5e 80 05 20 39 ff ff 00 00 00 00 02 02 40 00 |.^.. 9........@.|
00000010 02 00 02 43 7d f8 3f 00 3f 00 ff 00 00 00 00 00 |...C}.?.?.......|
00000020 00 00 00 00 80 00 29 00 00 00 00 20 20 20 20 20 |......).... |
00000030 20 20 20 20 20 20 46 41 54 31 36 20 20 20 00 00 | FAT16 ..|
od -tx1:
0000000 eb 5e 80 05 20 39 ff ff 00 00 00 00 02 02 40 00
0000020 02 00 02 43 7d f8 3f 00 3f 00 ff 00 00 00 00 00
0000040 00 00 00 00 80 00 29 00 00 00 00 20 20 20 20 20
0000060 20 20 20 20 20 20 46 41 54 31 36 20 20 20 00 00
I think the previous one looks better, because it has text char as
well as hex value.
--
Bean
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-08-04 15:21 ` Bean
@ 2007-08-05 9:58 ` Robert Millan
0 siblings, 0 replies; 8+ messages in thread
From: Robert Millan @ 2007-08-05 9:58 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Aug 04, 2007 at 11:21:24PM +0800, Bean wrote:
> On 8/4/07, Robert Millan <rmh@aybabtu.com> wrote:
> > On Fri, Aug 03, 2007 at 11:33:38PM +0800, Bean wrote:
> > > Hi,
> > >
> > > I have written a new command dump, it can hex dump content of file or memory.
> > >
> > > usage:
> > >
> > > dump [-s skip] [-n length] { FILE | (mem) }
> > >
> > > The output look just like command hexdump.
> >
> > I see that the output of hexdump is the same as "od -x". However, I find
> > "od -tx1" more useful. Maybe it would be better to do that instead?
>
> In my system, hexdump output look like this:
>
> 00000000 eb 5e 80 05 20 39 ff ff 00 00 00 00 02 02 40 00 |.^.. 9........@.|
> 00000010 02 00 02 43 7d f8 3f 00 3f 00 ff 00 00 00 00 00 |...C}.?.?.......|
> 00000020 00 00 00 00 80 00 29 00 00 00 00 20 20 20 20 20 |......).... |
> 00000030 20 20 20 20 20 20 46 41 54 31 36 20 20 20 00 00 | FAT16 ..|
>
> od -tx1:
>
> 0000000 eb 5e 80 05 20 39 ff ff 00 00 00 00 02 02 40 00
> 0000020 02 00 02 43 7d f8 3f 00 3f 00 ff 00 00 00 00 00
> 0000040 00 00 00 00 80 00 29 00 00 00 00 20 20 20 20 20
> 0000060 20 20 20 20 20 20 46 41 54 31 36 20 20 20 00 00
>
> I think the previous one looks better, because it has text char as
> well as hex value.
I was referring to:
$ hexdump /bin/ls | head -n 1
0000000 457f 464c 0102 0001 0000 0000 0000 0000
$ od -tx1 /bin/ls | head -n 1
0000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Your example seems ok IMO.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-08-03 15:33 New command dump Bean
2007-08-04 9:49 ` Robert Millan
@ 2007-08-05 18:39 ` Hollis Blanchard
2007-11-10 17:38 ` Marco Gerards
2 siblings, 0 replies; 8+ messages in thread
From: Hollis Blanchard @ 2007-08-05 18:39 UTC (permalink / raw)
To: The development of GRUB 2
On 8/3/07, Bean <bean123ch@gmail.com> wrote:
> Hi,
>
> I have written a new command dump, it can hex dump content of file or memory.
>
> usage:
>
> dump [-s skip] [-n length] { FILE | (mem) }
>
> The output look just like command hexdump.
>
> If you use (mem) as filename, it will dump physical memory instead of
> file. when dumping memory, the default length is 256, but when dumping
> normal file, the default length is the whole file.
>
> Inside grub2, modules can call function dump directly:
>
> void dump(unsigned long base,char* buf, int len);
Thanks, I've been meaning to submit something like this for a long time. :)
The module I wrote actually had one more convenience feature: it keeps
a "position" pointer, and if you run the command again without an
address, it displays the memory immediately after the last dump.
-Hollis
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-08-03 15:33 New command dump Bean
2007-08-04 9:49 ` Robert Millan
2007-08-05 18:39 ` Hollis Blanchard
@ 2007-11-10 17:38 ` Marco Gerards
2007-11-14 6:31 ` Bean
2 siblings, 1 reply; 8+ messages in thread
From: Marco Gerards @ 2007-11-10 17:38 UTC (permalink / raw)
To: The development of GRUB 2
Bean <bean123ch@gmail.com> writes:
Hi,
> I have written a new command dump, it can hex dump content of file or memory.
Great!
> usage:
>
> dump [-s skip] [-n length] { FILE | (mem) }
>
> The output look just like command hexdump.
>
> If you use (mem) as filename, it will dump physical memory instead of
> file. when dumping memory, the default length is 256, but when dumping
> normal file, the default length is the whole file.
>
> Inside grub2, modules can call function dump directly:
>
> void dump(unsigned long base,char* buf, int len);
>
> --
> Bean
>
> 2007-08-03 Bean <bean123ch@gmail.com>
>
> * conf/common.rmk (pkgdata_MODULES): Add dump.mod.
> (dump_mod_SOURCES): New variable.
> (dump_mod_CFLAGS): Likewise.
> (dump_mod_LDFLAGS): Likewise.
>
> * include/grub/dump.h: New file.
>
> * commands/dump.c: New file.
I think we should commit this soon! Can you please add it to grub-emu
as well?
> Index: conf/common.rmk
> ===================================================================
> RCS file: /sources/grub/grub2/conf/common.rmk,v
> retrieving revision 1.16
> diff -u -p -r1.16 common.rmk
> --- conf/common.rmk 2 Aug 2007 19:12:52 -0000 1.16
> +++ conf/common.rmk 3 Aug 2007 14:59:55 -0000
> @@ -199,7 +199,7 @@ lvm_mod_LDFLAGS = $(COMMON_LDFLAGS)
> pkgdata_MODULES += hello.mod boot.mod terminal.mod ls.mod \
> cmp.mod cat.mod help.mod font.mod search.mod \
> loopback.mod configfile.mod \
> - terminfo.mod test.mod blocklist.mod
> + terminfo.mod test.mod blocklist.mod dump.mod
>
> # For hello.mod.
> hello_mod_SOURCES = hello/hello.c
> @@ -276,6 +276,11 @@ blocklist_mod_SOURCES = commands/blockli
> blocklist_mod_CFLAGS = $(COMMON_CFLAGS)
> blocklist_mod_LDFLAGS = $(COMMON_LDFLAGS)
>
> +# For blocklist.mod.
> +dump_mod_SOURCES = commands/dump.c
> +dump_mod_CFLAGS = $(COMMON_CFLAGS)
> +dump_mod_LDFLAGS = $(COMMON_LDFLAGS)
> +
> # Misc.
> pkgdata_MODULES += gzio.mod elf.mod
>
> Index: include/grub/dump.h
> ===================================================================
> RCS file: /sources/grub/grub2/include/grub/dump.h,v
> diff -Nu include/grub/dump.h
> --- /dev/null 2007-08-03 21:55:33.600000000 +0800
> +++ include/grub/dump.h 2007-08-03 18:27:57.000000000 +0800
> @@ -0,0 +1,25 @@
> +/* dump.h - prototypes for dump */
> +/*
> + * GRUB -- GRand Unified Bootloader
> + * Copyright (C) 2007 Free Software Foundation, Inc.
> + *
> + * GRUB is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GRUB is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef GRUB_DUMP_H
> +#define GRUB_DUMP_H 1
> +
> +void dump(unsigned long bse,char* buf,int len);
> +
> +#endif /* ! GRUB_DUMP_H */
> Index: commands/dump.c
> ===================================================================
> RCS file: /sources/grub/grub2/commands/dump.c,v
> diff -Nu commands/dump.c
> --- /dev/null 2007-08-03 21:55:33.600000000 +0800
> +++ commands/dump.c 2007-08-03 23:00:48.000000000 +0800
> @@ -0,0 +1,144 @@
> +/* dump.c - command to dump the contents of a file or memory */
> +/*
> + * GRUB -- GRand Unified Bootloader
> + * Copyright (C) 2007 Free Software Foundation, Inc.
> + *
> + * GRUB is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GRUB is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <grub/normal.h>
> +#include <grub/dl.h>
> +#include <grub/arg.h>
> +#include <grub/file.h>
> +#include <grub/disk.h>
> +#include <grub/misc.h>
> +#include <grub/gzio.h>
> +#include <grub/dump.h>
> +
> +static const struct grub_arg_option options[] = {
> + {"skip", 's', 0, "skip offset bytes from the beginning of file.", 0,
> + ARG_TYPE_INT},
> + {"length", 'n', 0, "read only length bytes", 0, ARG_TYPE_INT},
> + {0, 0, 0, 0, 0, 0}
> +};
> +
> +void
> +dump (unsigned long bse, char *buf, int len)
Can you please use another name, this is a not static. Not being
static is not a problem to me, having access from other modules to
this one for debugging might be useful sometimes.
> +{
> + int pos;
> + char line[80];
> +
> + while (len > 0)
> + {
> + int cnt, i;
> +
> + pos = grub_sprintf (line, "%08lx ", bse);
> + cnt = 16;
> + if (cnt > len)
> + cnt = len;
> +
> + for (i = 0; i < cnt; i++)
> + {
> + pos += grub_sprintf (&line[pos], "%02x ", (unsigned char) buf[i]);
> + if ((i & 7) == 7)
> + line[pos++] = ' ';
> + }
> +
> + for (; i < 16; i++)
> + {
> + pos += grub_sprintf (&line[pos], " ");
> + if ((i & 7) == 7)
> + line[pos++] = ' ';
> + }
> +
> + line[pos++] = '|';
> +
> + for (i = 0; i < cnt; i++)
> + line[pos++] = ((buf[i] >= 32) && (buf[i] < 127)) ? buf[i] : '.';
> +
> + line[pos++] = '|';
> +
> + line[pos] = 0;
> +
> + grub_printf ("%s\n", line);
> +
> + bse += 16;
> + buf += 16;
> + len -= cnt;
> + }
> +}
> +
> +static grub_err_t
> +grub_cmd_dump (struct grub_arg_list *state, int argc, char **args)
> +{
> + grub_file_t file;
> + char buf[GRUB_DISK_SECTOR_SIZE];
> + grub_ssize_t size, length;
> + unsigned long skip;
> + int is_file;
> +
> + if (argc != 1)
> + return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
> +
> + skip = (state[0].set) ? grub_strtoul (state[0].arg, 0, 0) : 0;
> + length = (state[1].set) ? grub_strtoul (state[1].arg, 0, 0) : 0;
> +
> + is_file = (grub_strcmp (args[0], "(mem)"));
> + if ((!is_file) && (!length))
> + length = 256;
> +
> + if (is_file)
> + {
> + file = grub_gzfile_open (args[0], 1);
> + if (!file)
> + return 0;
> +
> + file->offset = skip;
> +
> + while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
> + {
> + unsigned long len;
> +
> + len = ((length) && (size > length)) ? length : size;
> + dump (skip, buf, len);
> + skip += len;
> + if (length)
> + {
> + length -= len;
> + if (!length)
> + break;
> + }
> + }
> +
> + grub_file_close (file);
> + }
> + else
> + dump (skip, (char *) skip, length);
> +
> + return 0;
> +}
> +\f
> +
> +GRUB_MOD_INIT (dump)
> +{
> + (void) mod; /* To stop warning. */
> + grub_register_command ("dump", grub_cmd_dump, GRUB_COMMAND_FLAG_BOTH,
> + "dump [ -s offset ] [-n length] { FILE | (mem) }",
> + "Dump the contents of a file or memory.", options);
> +}
> +
> +GRUB_MOD_FINI (dump)
> +{
> + grub_unregister_command ("dump");
> +}
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-11-10 17:38 ` Marco Gerards
@ 2007-11-14 6:31 ` Bean
2007-11-18 6:43 ` Robert Millan
0 siblings, 1 reply; 8+ messages in thread
From: Bean @ 2007-11-14 6:31 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 324 bytes --]
Hi,
> I think we should commit this soon! Can you please add it to grub-emu
done.
> Can you please use another name, this is a not static. Not being
> static is not a problem to me, having access from other modules to
> this one for debugging might be useful sometimes.
i change the command name to hexdump.
--
Bean
[-- Attachment #2: grub2-hexdump.diff --]
[-- Type: application/octet-stream, Size: 9691 bytes --]
2007-11-14 Bean <bean123ch@gmail.com>
* conf/common.rmk (pkgdata_MODULES): Add hexdump.mod.
(hexdump_mod_SOURCES): New variable.
(hexdump_mod_CFLAGS): Likewise.
(hexdump_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add command/hexdump.c.
* conf/i386-efi.rmk (grub_emu_SOURCES): Add command/hexdump.c.
* conf/i386-linuxbios.rmk (grub_emu_SOURCES): Add command/hexdump.c.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add command/hexdump.c.
* include/grub/hexdump.h: New file.
* commands/hexdump.c: New file.
Index: conf/common.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/common.rmk,v
retrieving revision 1.16
diff -u -p -r1.16 common.rmk
--- conf/common.rmk 2 Aug 2007 19:12:52 -0000 1.16
+++ conf/common.rmk 14 Nov 2007 05:40:16 -0000
@@ -199,7 +199,7 @@ lvm_mod_LDFLAGS = $(COMMON_LDFLAGS)
pkgdata_MODULES += hello.mod boot.mod terminal.mod ls.mod \
cmp.mod cat.mod help.mod font.mod search.mod \
loopback.mod configfile.mod \
- terminfo.mod test.mod blocklist.mod
+ terminfo.mod test.mod blocklist.mod hexdump.mod
# For hello.mod.
hello_mod_SOURCES = hello/hello.c
@@ -276,6 +276,11 @@ blocklist_mod_SOURCES = commands/blockli
blocklist_mod_CFLAGS = $(COMMON_CFLAGS)
blocklist_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For hexdump.mod.
+hexdump_mod_SOURCES = commands/hexdump.c
+hexdump_mod_CFLAGS = $(COMMON_CFLAGS)
+hexdump_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# Misc.
pkgdata_MODULES += gzio.mod elf.mod
Index: conf/i386-pc.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-pc.rmk,v
retrieving revision 1.93
diff -u -p -r1.93 i386-pc.rmk
--- conf/i386-pc.rmk 10 Nov 2007 18:34:48 -0000 1.93
+++ conf/i386-pc.rmk 14 Nov 2007 05:40:40 -0000
@@ -91,7 +91,7 @@ grub_emu_DEPENDENCIES = grub_script.tab.
grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/echo.c commands/help.c \
commands/terminal.c commands/ls.c commands/test.c \
- commands/search.c commands/blocklist.c \
+ commands/search.c commands/blocklist.c commands/hexdump.c \
commands/i386/pc/halt.c commands/i386/pc/reboot.c \
commands/i386/cpuid.c \
disk/host.c disk/loopback.c disk/raid.c disk/lvm.c \
Index: conf/i386-efi.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-efi.rmk,v
retrieving revision 1.23
diff -u -p -r1.23 i386-efi.rmk
--- conf/i386-efi.rmk 22 Oct 2007 19:59:32 -0000 1.23
+++ conf/i386-efi.rmk 14 Nov 2007 06:17:15 -0000
@@ -44,7 +44,7 @@ grub_emu_DEPENDENCIES = grub_script.tab.
grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/help.c \
commands/terminal.c commands/ls.c commands/test.c \
- commands/search.c \
+ commands/search.c commands/hexdump.c \
commands/i386/pc/halt.c commands/i386/pc/reboot.c \
commands/i386/cpuid.c \
disk/loopback.c \
Index: conf/i386-linuxbios.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-linuxbios.rmk,v
retrieving revision 1.2
diff -u -p -r1.2 i386-linuxbios.rmk
--- conf/i386-linuxbios.rmk 5 Nov 2007 16:15:25 -0000 1.2
+++ conf/i386-linuxbios.rmk 14 Nov 2007 06:17:15 -0000
@@ -68,7 +68,7 @@ grub_emu_DEPENDENCIES = grub_script.tab.
grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/echo.c commands/help.c \
commands/terminal.c commands/ls.c commands/test.c \
- commands/search.c commands/blocklist.c \
+ commands/search.c commands/blocklist.c commands/hexdump.c \
commands/i386/pc/halt.c commands/i386/pc/reboot.c \
commands/i386/cpuid.c \
disk/host.c disk/loopback.c disk/raid.c disk/lvm.c \
Index: conf/powerpc-ieee1275.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/powerpc-ieee1275.rmk,v
retrieving revision 1.74
diff -u -p -r1.74 powerpc-ieee1275.rmk
--- conf/powerpc-ieee1275.rmk 22 Oct 2007 19:59:32 -0000 1.74
+++ conf/powerpc-ieee1275.rmk 14 Nov 2007 06:17:18 -0000
@@ -56,7 +56,7 @@ grub_emu_DEPENDENCIES = grub_script.tab.
grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/help.c \
commands/search.c commands/terminal.c commands/test.c \
- commands/ls.c commands/blocklist.c \
+ commands/ls.c commands/blocklist.c commands/hexdump.c \
commands/ieee1275/halt.c commands/ieee1275/reboot.c \
disk/loopback.c \
fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c \
Index: include/grub/hexdump.h
==========================================
RCS file: /sources/grub/grub2/include/grub/hexdump.h,v
diff -Nu include/grub/hexdump.h
--- /dev/null 2007-11-14 20:37:17.256044485 +0800
+++ include/grub/hexdump.h 2007-11-14 12:42:55.906250000 +0800
@@ -0,0 +1,25 @@
+/* hexdump.h - prototypes for dump */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_HEXDUMP_H
+#define GRUB_HEXDUMP_H 1
+
+void hexdump(unsigned long bse,char* buf,int len);
+
+#endif /* ! GRUB_HEXDUMP_H */
Index: commands/hexdump.c
===================================================================
RCS file: /sources/grub/grub2/commands/hexdump.c,v
diff -Nu commands/hexdump.c
--- /dev/null 2007-11-14 20:37:17.256044485 +0800
+++ commands/hexdump.c 2007-11-14 13:20:51.734375000 +0800
@@ -0,0 +1,144 @@
+/* hexdump.c - command to dump the contents of a file or memory */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/arg.h>
+#include <grub/file.h>
+#include <grub/disk.h>
+#include <grub/misc.h>
+#include <grub/gzio.h>
+#include <grub/hexdump.h>
+
+static const struct grub_arg_option options[] = {
+ {"skip", 's', 0, "skip offset bytes from the beginning of file.", 0,
+ ARG_TYPE_INT},
+ {"length", 'n', 0, "read only length bytes", 0, ARG_TYPE_INT},
+ {0, 0, 0, 0, 0, 0}
+};
+
+void
+hexdump (unsigned long bse, char *buf, int len)
+{
+ int pos;
+ char line[80];
+
+ while (len > 0)
+ {
+ int cnt, i;
+
+ pos = grub_sprintf (line, "%08lx ", bse);
+ cnt = 16;
+ if (cnt > len)
+ cnt = len;
+
+ for (i = 0; i < cnt; i++)
+ {
+ pos += grub_sprintf (&line[pos], "%02x ", (unsigned char) buf[i]);
+ if ((i & 7) == 7)
+ line[pos++] = ' ';
+ }
+
+ for (; i < 16; i++)
+ {
+ pos += grub_sprintf (&line[pos], " ");
+ if ((i & 7) == 7)
+ line[pos++] = ' ';
+ }
+
+ line[pos++] = '|';
+
+ for (i = 0; i < cnt; i++)
+ line[pos++] = ((buf[i] >= 32) && (buf[i] < 127)) ? buf[i] : '.';
+
+ line[pos++] = '|';
+
+ line[pos] = 0;
+
+ grub_printf ("%s\n", line);
+
+ bse += 16;
+ buf += 16;
+ len -= cnt;
+ }
+}
+
+static grub_err_t
+grub_cmd_hexdump (struct grub_arg_list *state, int argc, char **args)
+{
+ grub_file_t file;
+ char buf[GRUB_DISK_SECTOR_SIZE];
+ grub_ssize_t size, length;
+ unsigned long skip;
+ int is_file;
+
+ if (argc != 1)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
+
+ skip = (state[0].set) ? grub_strtoul (state[0].arg, 0, 0) : 0;
+ length = (state[1].set) ? grub_strtoul (state[1].arg, 0, 0) : 0;
+
+ is_file = (grub_strcmp (args[0], "(mem)"));
+ if ((!is_file) && (!length))
+ length = 256;
+
+ if (is_file)
+ {
+ file = grub_gzfile_open (args[0], 1);
+ if (!file)
+ return 0;
+
+ file->offset = skip;
+
+ while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
+ {
+ unsigned long len;
+
+ len = ((length) && (size > length)) ? length : size;
+ hexdump (skip, buf, len);
+ skip += len;
+ if (length)
+ {
+ length -= len;
+ if (!length)
+ break;
+ }
+ }
+
+ grub_file_close (file);
+ }
+ else
+ hexdump (skip, (char *) skip, length);
+
+ return 0;
+}
+\f
+
+GRUB_MOD_INIT (hexdump)
+{
+ (void) mod; /* To stop warning. */
+ grub_register_command ("hexdump", grub_cmd_hexdump, GRUB_COMMAND_FLAG_BOTH,
+ "hexdump [ -s offset ] [-n length] { FILE | (mem) }",
+ "Dump the contents of a file or memory.", options);
+}
+
+GRUB_MOD_FINI (hexdump)
+{
+ grub_unregister_command ("hexdump");
+}
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: New command dump
2007-11-14 6:31 ` Bean
@ 2007-11-18 6:43 ` Robert Millan
0 siblings, 0 replies; 8+ messages in thread
From: Robert Millan @ 2007-11-18 6:43 UTC (permalink / raw)
To: The development of GRUB 2
On Wed, Nov 14, 2007 at 02:31:01PM +0800, Bean wrote:
> Hi,
>
> > I think we should commit this soon! Can you please add it to grub-emu
>
> done.
>
> > Can you please use another name, this is a not static. Not being
> > static is not a problem to me, having access from other modules to
> > this one for debugging might be useful sometimes.
>
> i change the command name to hexdump.
Very nice. That'll come handy sometimes :-)
Committed.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-11-18 6:44 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-03 15:33 New command dump Bean
2007-08-04 9:49 ` Robert Millan
2007-08-04 15:21 ` Bean
2007-08-05 9:58 ` Robert Millan
2007-08-05 18:39 ` Hollis Blanchard
2007-11-10 17:38 ` Marco Gerards
2007-11-14 6:31 ` Bean
2007-11-18 6:43 ` Robert Millan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.