История изменений
Исправление
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