LINUX.ORG.RU

История изменений

Исправление romeo250501, (текущая версия) :

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/mman.h>

int foo() {
        return 666;
}

int main() {
        mprotect((uintptr_t)foo / 4096 * 4096, 4096, PROT_READ | PROT_WRITE | PROT_EXEC);

        char code[] = {0x48, 0xC7, 0xC0, 0x2A, 0x00, 0x00, 0x00, 0xC3};
        memcpy(foo, code, sizeof(code));

        printf("%d\n", foo());
}
💢  ./test
42
💢  uname -a
Darwin master.lan 16.1.0 Darwin Kernel Version 16.1.0: Mon Oct  3 14:03:15 PDT 2016; root:xnu-3789.21.3~20/RELEASE_X86_64 x86_64
💢  sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.1
BuildVersion:	16B2548a

Исходная версия Deleted, :

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/mman.h>

int foo() {
        return 666;
}

int main() {
        mprotect((uintptr_t)foo / 4096 * 4096, 4096, PROT_READ | PROT_WRITE | PROT_EXEC);

        char code[] = {0x48, 0xC7, 0xC0, 0x2A, 0x00, 0x00, 0x00, 0xC3};
        memcpy(foo, code, sizeof(code));

        printf("%d\n", foo());
}
💢  ./test
42
💢  uname -a
Darwin master.lan 16.1.0 Darwin Kernel Version 16.1.0: Mon Oct  3 14:03:15 PDT 2016; root:xnu-3789.21.3~20/RELEASE_X86_64 x86_64
💢  sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.1
BuildVersion:	16B2548a