+2006-08-20 Soren Sandmann <sandmann@daimi.au.dk>
+
+ * elfparser.c (elf_parser_new_from_file): New function
+
2006-08-20 Soren Sandmann <sandmann@daimi.au.dk>
* elfparser.c (elf_parser_get_debug_link): New function
int n_symbols;
ElfSym * symbols;
gsize sym_strings;
+
+ GMappedFile * file;
};
static gboolean parse_elf_signature (const guchar *data, gsize length,
return parser;
}
+ElfParser *
+elf_parser_new_from_file (const char *filename,
+ GError **err)
+{
+ const guchar *data;
+ gsize length;
+ ElfParser *parser;
+
+ GMappedFile *file = g_mapped_file_new (filename, FALSE, NULL);
+
+ if (!file)
+ return NULL;
+
+ data = (guchar *)g_mapped_file_get_contents (file);
+ length = g_mapped_file_get_length (file);
+
+ parser = elf_parser_new (data, length);
+
+ parser->file = file;
+
+ return parser;
+}
+
guint32
elf_parser_get_crc32 (ElfParser *parser)
{
for (i = 0; i < parser->n_sections; ++i)
section_free (parser->sections[i]);
g_free (parser->sections);
+
+ if (parser->file)
+ g_mapped_file_free (parser->file);
g_free (parser);
}
ElfParser *elf_parser_new (const guchar *data,
gsize length);
+ElfParser *elf_parser_new_from_file (const char *filename,
+ GError **err);
void elf_parser_free (ElfParser *parser);
/* Lookup a symbol in the file.
int
main ()
{
- GMappedFile *libgtk = g_mapped_file_new ("/usr/lib/libgtk-x11-2.0.so",
- FALSE, NULL);
- ElfParser *elf = elf_parser_new (
- g_mapped_file_get_contents (libgtk),
- g_mapped_file_get_length (libgtk));
-
+ ElfParser *elf;
int i;
+ elf = elf_parser_new_from_file ("/usr/lib/libgtk-x11-2.0.so", NULL);
+
+ if (!elf)
+ {
+ g_print ("NO ELF!!!!\n");
+ return -1;
+ }
+
+ elf_parser_get_crc32 (elf);
+
for (i = 0; i < 5000000; ++i)
{
+ elf_parser_get_crc32 (elf);
check (elf, 0x077c80f0 - (0x07787000 - 0)); /* gtk_about_dialog_set_artists (add - (map - offset)) */
check (elf, 0x077c80f0 - (0x07787000 - 0)); /* same (but in the middle of the function */