Ich versuche, dieser Anleitung zu folgen: http://wiki.osdev.org/ELF_Tutorial zu verarbeiten elf files
.Korrekter Weg zum Lesen von Elf-Dateien in C
jedoch Funktion bool elf_check_fil
Staaten, dass bestimmte Datei ist keine korrekte Elf (trotz readelf
zeigt, dass es ist)
Code:
bool elf_check_file(Elf32_Ehdr *hdr) {
if(!hdr) return false;
if(hdr->e_ident[EI_MAG0] != ELFMAG0) {
ERROR("ELF Header EI_MAG0 incorrect.\n");
return false;
}
if(hdr->e_ident[EI_MAG1] != ELFMAG1) {
ERROR("ELF Header EI_MAG1 incorrect.\n");
return false;
}
if(hdr->e_ident[EI_MAG2] != ELFMAG2) {
ERROR("ELF Header EI_MAG2 incorrect.\n");
return false;
}
if(hdr->e_ident[EI_MAG3] != ELFMAG3) {
ERROR("ELF Header EI_MAG3 incorrect.\n");
return false;
}
return true;
}
Laden der Datei:
FILE* elf = fopen(argv[1], "r");
Elf32_Ehdr *hdr = (Elf32_Ehdr *) elf;
elf_check_file(hdr);
Mit gdb
I ch Die hdr->e_ident[EI_MAG0]
... hdr->e_ident[EI_MAG3]
enthielten tatsächlich keine korrekten magischen Zahlen. Warum?
'elf_check_file' erwartet Inhalt der Elf-Datei, nicht Dateikennung:
korrekte Art und Weise sollte in etwa so sein. Sie können nicht einfach 'FILE *' in 'Elf32_Ehdr *' umwandeln, Sie müssen den Inhalt lesen. – aragaer
Es gibt auch ein Problem, dass Sie die Datei als * Text * -Datei öffnen. –
Sie brauchen 'rb'. Elfen sind Doppelgänger. Trolle und Vampire können Sie als Text öffnen, aber nicht als Elfen. –