Deleted Added
full compact
elfclass.h (276415) elfclass.h (277592)
1/*
2 * Copyright (c) Christos Zoulas 2008.
3 * All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 18 unchanged lines hidden (view full) ---

27 if (nbytes <= sizeof(elfhdr))
28 return 0;
29
30 u.l = 1;
31 (void)memcpy(&elfhdr, buf, sizeof elfhdr);
32 swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[EI_DATA];
33
34 type = elf_getu16(swap, elfhdr.e_type);
1/*
2 * Copyright (c) Christos Zoulas 2008.
3 * All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 18 unchanged lines hidden (view full) ---

27 if (nbytes <= sizeof(elfhdr))
28 return 0;
29
30 u.l = 1;
31 (void)memcpy(&elfhdr, buf, sizeof elfhdr);
32 swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[EI_DATA];
33
34 type = elf_getu16(swap, elfhdr.e_type);
35 notecount = ms->elf_notes_max;
35 switch (type) {
36#ifdef ELFCORE
37 case ET_CORE:
38 phnum = elf_getu16(swap, elfhdr.e_phnum);
39 if (phnum > ms->elf_phnum_max)
36 switch (type) {
37#ifdef ELFCORE
38 case ET_CORE:
39 phnum = elf_getu16(swap, elfhdr.e_phnum);
40 if (phnum > ms->elf_phnum_max)
40 return toomany(ms, "program", phnum);
41 return toomany(ms, "program headers", phnum);
41 flags |= FLAGS_IS_CORE;
42 if (dophn_core(ms, clazz, swap, fd,
43 (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
44 (size_t)elf_getu16(swap, elfhdr.e_phentsize),
42 flags |= FLAGS_IS_CORE;
43 if (dophn_core(ms, clazz, swap, fd,
44 (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
45 (size_t)elf_getu16(swap, elfhdr.e_phentsize),
45 fsize, &flags) == -1)
46 fsize, &flags, &notecount) == -1)
46 return -1;
47 break;
48#endif
49 case ET_EXEC:
50 case ET_DYN:
51 phnum = elf_getu16(swap, elfhdr.e_phnum);
52 if (phnum > ms->elf_phnum_max)
53 return toomany(ms, "program", phnum);
54 shnum = elf_getu16(swap, elfhdr.e_shnum);
55 if (shnum > ms->elf_shnum_max)
56 return toomany(ms, "section", shnum);
57 if (dophn_exec(ms, clazz, swap, fd,
58 (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
59 (size_t)elf_getu16(swap, elfhdr.e_phentsize),
47 return -1;
48 break;
49#endif
50 case ET_EXEC:
51 case ET_DYN:
52 phnum = elf_getu16(swap, elfhdr.e_phnum);
53 if (phnum > ms->elf_phnum_max)
54 return toomany(ms, "program", phnum);
55 shnum = elf_getu16(swap, elfhdr.e_shnum);
56 if (shnum > ms->elf_shnum_max)
57 return toomany(ms, "section", shnum);
58 if (dophn_exec(ms, clazz, swap, fd,
59 (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
60 (size_t)elf_getu16(swap, elfhdr.e_phentsize),
60 fsize, &flags, shnum) == -1)
61 fsize, shnum, &flags, &notecount) == -1)
61 return -1;
62 /*FALLTHROUGH*/
63 case ET_REL:
64 shnum = elf_getu16(swap, elfhdr.e_shnum);
65 if (shnum > ms->elf_shnum_max)
62 return -1;
63 /*FALLTHROUGH*/
64 case ET_REL:
65 shnum = elf_getu16(swap, elfhdr.e_shnum);
66 if (shnum > ms->elf_shnum_max)
66 return toomany(ms, "section", shnum);
67 return toomany(ms, "section headers", shnum);
67 if (doshn(ms, clazz, swap, fd,
68 (off_t)elf_getu(swap, elfhdr.e_shoff), shnum,
69 (size_t)elf_getu16(swap, elfhdr.e_shentsize),
68 if (doshn(ms, clazz, swap, fd,
69 (off_t)elf_getu(swap, elfhdr.e_shoff), shnum,
70 (size_t)elf_getu16(swap, elfhdr.e_shentsize),
70 fsize, &flags, elf_getu16(swap, elfhdr.e_machine),
71 (int)elf_getu16(swap, elfhdr.e_shstrndx)) == -1)
71 fsize, elf_getu16(swap, elfhdr.e_machine),
72 (int)elf_getu16(swap, elfhdr.e_shstrndx),
73 &flags, &notecount) == -1)
72 return -1;
73 break;
74
75 default:
76 break;
77 }
74 return -1;
75 break;
76
77 default:
78 break;
79 }
80 if (notecount == 0)
81 return toomany(ms, "notes", ms->elf_notes_max);
78 return 1;
82 return 1;