#include <fcntl.h>
#include <getopt.h>
#include <sys/stat.h>
-#include <arpa/inet.h>
#include "common.h"
#include "cbfs.h"
struct cbfs_payload_segment *segs;
int i;
+ if(!iself(input)){
+ printf("Fatal error: the payload file is not in ELF format!\n");
+ exit(1);
+ }
+
+
comp_func_ptr compress = compression_function(algo);
if (!compress)
return -1;
name = (char *)(strtab + shdr[i].sh_name);
- if (!strcmp(name, ".note.pinfo"))
+ if (!strcmp(name, ".note.pinfo")) {
segments++;
+ isize += (unsigned int)shdr[i].sh_size;
+ }
}
/* Now, regular headers - we only care about PT_LOAD headers,
if (phdr[i].p_filesz == 0) {
segs[segments].type = PAYLOAD_SEGMENT_BSS;
segs[segments].load_addr =
- (unsigned long long)htonl(phdr[i].p_paddr);
+ (uint64_t)htonll(phdr[i].p_paddr);
segs[segments].mem_len =
- (unsigned int)htonl(phdr[i].p_memsz);
+ (uint32_t)htonl(phdr[i].p_memsz);
segs[segments].offset = htonl(doffset);
segments++;
}
segs[segments].type = PAYLOAD_SEGMENT_DATA;
- segs[segments].load_addr = (unsigned int)htonl(phdr[i].p_paddr);
- segs[segments].mem_len = (unsigned int)htonl(phdr[i].p_memsz);
+ segs[segments].load_addr = (uint64_t)htonll(phdr[i].p_paddr);
+ segs[segments].mem_len = (uint32_t)htonl(phdr[i].p_memsz);
segs[segments].compression = htonl(algo);
segs[segments].offset = htonl(doffset);
}
segs[segments].type = PAYLOAD_SEGMENT_ENTRY;
- segs[segments++].load_addr = (unsigned long long)htonl(ehdr->e_entry);
+ segs[segments++].load_addr = (uint64_t)htonll(ehdr->e_entry);
*output = sptr;