Ð 12:33:23pm +0300 ÐÐ 30 ÐÐÐ 2004Ð, Aleksander Valchev ÐÐÐÐÑÐ:
> ÐÑÐÐÐÐÐÐ ÐÐ Ð ÐÑÐÐÑÐÐÐÐ (Ð/Ð++) ÐÐ ÐÐÑÐÐÐÐÐÑ 
> ÐÐÐÐ ÐÐÐÐÐ ÑÐÐÐ Ð "binary 
> executable"?
> ÐÐÐÐ ÐÐ ÐÑÐÐÐÐÐ ÐÐÑÐ ÐÐÑÐ file(1). Ð `man file` ÐÐÑÐ, ÑÐ 
> ÐÑÐÐÐ "binary 
> executable" ÑÐÐÐ ÐÐÐ "magic number" ÐÑÐÑÐÐ Ð ÐÐÑÐÐÐÑÐ ÐÐ 
> ÑÐÐÐÐ Ð ÐÐ ÑÐÐÐ ÑÐ  
> ÐÐÑÐÐÐÐÑ ÐÐÐÐ Ð ÐÐÐÑÐÐÐÐ. ÐÐÐ ÐÑÐÐÐ ÐÐÐÐ ÐÐ 
> ÐÐÐÐ ÐÑÐÐÐÑÐ ÐÐÐÐ...

ÐÐÐÐ, ÐÐÐÑÐ ÑÐ ÑÑÑÐÐÐ Ð ÐÐ ÐÑÐÐÐÐÐÐÑ 
ÑÐÐÑÐÑÐÐÐÑÐÑÑÐ ÐÐ ÑÐÑÐÐÑÐ ÐÐ 
ÐÐÐÑÐÐÐÐÐ ÑÐÐÐÐÐÐ ELF[1]. Ð ÑÐÐÑÑÐ ÐÐ ÐÐÐÑÐÐÐÐÐÑ 
ÑÐÐÐ ÑÐ ÐÐÐÐÑÐ
ÐÐÐÐÑÐÑÐÐ ÑÐÐÐÐÑÑÑÐ, ÐÐÑÑÐ ÑÑÑÐÐÐ ÐÐ 
ÐÑÐÐÐÑÐÑ[2]. ÐÑÐÐÐÑÐÐ Ð ÐÐÐÐ
ÑÐÐÐÐÐ ÐÐÐÐÐÑÑÑÐÑÐÐÐÐÐ ÐÑÐÐÑÐÐÐÐ :)


[1] http://www.caldera.com/developers/gabi
[2] http://www.caldera.com/developers/gabi/latest/ch4.eheader.html#elfid


ÐÐÐÐÑÐÐÐ,
ÐÐÐÑÐÑ
-- 
Linux is for those who hate Windows.
FreeBSD is for those who love UNIX.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <elf.h>


int check_elf(int fd)
{
         Elf_Ehdr ehdr;
         int ret;
         
         ret = read(fd, &ehdr, sizeof(Elf_Ehdr));
         if(ret == -1 || ret < sizeof(Elf_Ehdr))
                  return -1;

         if(ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
                ehdr.e_ident[EI_MAG1] != ELFMAG1 ||
                ehdr.e_ident[EI_MAG2] != ELFMAG2 ||
                ehdr.e_ident[EI_MAG3] != ELFMAG3)
                  return -1;

         return 0;
}

int main(int argc, char **argv)
{
         char *files[] = { "/bin/ls", "/etc/motd" };
         int fd;
         
         fd = open(files[0], O_RDONLY);
         if(fd == -1)
                  return 1;

         if(check_elf(fd) == -1)
                  printf("%s: not an ELF executable\n", files[0]);
         else
                  printf("%s: an ELF executable\n", files[0]);

         close(fd);


         fd = open(files[1], O_RDONLY);
         if(fd == -1)
                  return 1;

         if(check_elf(fd) == -1)
                  printf("%s: not an ELF executable\n", files[1]);
         else
                  printf("%s: an ELF executable\n", files[1]);

         close(fd);
         
         return 0;
}
  • ... Vasil Kolev
    • ... Peter Pentchev
    • Виктор Василев

Reply via email to