MCPcopy Create free account
hub / github.com/GJDuck/e9patch / parseReserve

Function parseReserve

src/e9patch/e9api.cpp:532–702  ·  view source on GitHub ↗

* Parse a reserve message. */

Source from the content-addressed store, hash-verified

530 * Parse a reserve message.
531 */
532static void parseReserve(Binary *B, const Message &msg)
533{
534 bool absolute = false;
535 intptr_t address = 0;
536 intptr_t init = 0;
537 intptr_t fini = 0;
538 intptr_t mmap = 0;
539 size_t length = 0;
540 Trampoline *bytes = nullptr, *preinit = nullptr, *postinit = nullptr;
541 int protection = PROT_READ | PROT_EXEC;
542 bool have_address = false, have_protection = false, have_init = false,
543 have_fini = false, have_mmap = false, have_length = false,
544 have_absolute = false, dup = false;
545 for (unsigned i = 0; i < msg.num_params; i++)
546 {
547 switch (msg.params[i].name)
548 {
549 case PARAM_ABSOLUTE:
550 dup = dup || have_absolute;
551 absolute = msg.params[i].value.boolean;
552 have_absolute = true;
553 break;
554 case PARAM_ADDRESS:
555 dup = dup || have_address;
556 address = (intptr_t)msg.params[i].value.integer;
557 have_address = true;
558 break;
559 case PARAM_BYTES:
560 dup = dup || (bytes != nullptr);
561 bytes = msg.params[i].value.trampoline;
562 break;
563 case PARAM_INIT:
564 dup = dup || have_init;
565 init = (intptr_t)msg.params[i].value.integer;
566 have_init = true;
567 break;
568 case PARAM_FINI:
569 dup = dup || have_fini;
570 fini = (intptr_t)msg.params[i].value.integer;
571 have_fini = true;
572 break;
573 case PARAM_LENGTH:
574 dup = dup || have_length;
575 length = (size_t)msg.params[i].value.integer;
576 have_length = true;
577 break;
578 case PARAM_MMAP:
579 dup = dup || have_mmap;
580 mmap = (intptr_t)msg.params[i].value.integer;
581 have_mmap = true;
582 break;
583 case PARAM_POSTINIT:
584 dup = dup || (postinit != nullptr);
585 postinit = msg.params[i].value.trampoline;
586 break;
587 case PARAM_PREINIT:
588 dup = dup || (preinit != nullptr);
589 preinit = msg.params[i].value.trampoline;

Callers 1

parseMessageFunction · 0.85

Calls 5

errorFunction · 0.85
getTrampolineSizeFunction · 0.85
makePaddingFunction · 0.85
allocateFunction · 0.85
reserveFunction · 0.85

Tested by

no test coverage detected