immer die sh_name Element in einer section-header elf-Datei
Ich versuche, um die richtige offset zu dem Namen des Bereichs, durch den Zugriff auf die sh_name
Mitglied einer elf-Datei, aber es immer wieder geben mir null, oder null...
Ich soll nur mmap()
und die elf.h
- keine Hilfsfunktionen
Also ich habe:
void* map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0))
header = (Elf32_Ehdr *) map_start;
secoff = header->e_shoff;
section = (Elf32_Shdr *)(map_start + secoff);
aber wenn ich das mache:
printf("name offset = %d\n", (section->sh_name));
es gibt mir immer 0...
was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht gerade alles falsch.
Den
sh_name
ist nicht ein Zeiger, es ist ein offset in.shstrtab
Abschnitt enthält die eigentlichen Namen für den Abschnitt ein.Finden Sie die
.shstrtab
Abschnitt vonheader->e_shstrndx
.Update:
Druckt es
0
. Was macht Euch glauben, dass0
ist nicht ein int?Vielleicht dieses Beispiel erklären?
open
bevor Siemmap
, und meine Beispiele nicht. Deine Frage ist wahrscheinlich "können wir nicht einfach verwendenread
stattmmap
?". Ja, Sie können.sh_strtab->sh_offset
, bekomme ich eine riesige negative Zahl (minus 800k oder so), ist das falsch? Könnten Sie mir helfen herauszufinden, warum diese Lösung nicht funktioniert? Dank-m32
Flagge? Wenn Sie es als 64-bit-Binärdatei, die Sie brauchen, um zu ersetzenElf32
mitElf64
überall.