0
Bu kılavuza uymaya çalışıyorum: , elf files
.Elf dosyalarını okumak için doğru yol C
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;
}
: Ancak
, fonksiyon bool elf_check_fil
devletler göz önüne alındığında dosya (o olduğunu gösteren readelf
rağmen) doğru bir elf
Kod değil
FILE* elf = fopen(argv[1], "r"); Elf32_Ehdr *hdr = (Elf32_Ehdr *) elf; elf_check_file(hdr);
gdb
Kullanarak hdr->e_ident[EI_MAG0]
... hdr->e_ident[EI_MAG3]
aslında doğru sihirli numaraları içermediğini umuyor. Niye ya?
'elf_check_file' FILEHANDLE değil, elf dosyasının içeriğini bekler:
Doğru yolu böyle bir şey olması gerekir. Elf32_Ehdr * 'e' '' '' '' '' '' '' '' '' '' '' '' '' '' '' a çeviremezsiniz, içeriğini okumak zorundasınız. – aragaer
Ayrıca, dosyayı bir * metin * dosyası olarak açmanızın da bir sorunu vardır. –
'rb'ye ihtiyacınız var. Elfler ikilidir. Troller ve vampirler, metin olarak açabilirsiniz, elf değil. –