use VirtualProtect for recent vc
This commit is contained in:
parent
4b235f7085
commit
e10a7e7f7c
1 changed files with 15 additions and 4 deletions
|
@ -152,17 +152,28 @@ public:
|
||||||
|
|
||||||
void dump(const Xbyak::uint8 *code, size_t size)
|
void dump(const Xbyak::uint8 *code, size_t size)
|
||||||
{
|
{
|
||||||
puts("#include <stdio.h>\nstatic int stack[128 * 1024];\nstatic const unsigned char code[] = {");
|
puts("#include <stdio.h>\nstatic int stack[128 * 1024];");
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
printf("static __declspec(align(4096)) ");
|
||||||
|
#else
|
||||||
|
printf("static __attribute__((aligned(4096)))");
|
||||||
|
#endif
|
||||||
|
puts("const unsigned char code[] = {");
|
||||||
for (size_t i = 0; i < size; i++) {
|
for (size_t i = 0; i < size; i++) {
|
||||||
printf("0x%02x,", code[i]); if ((i % 16) == 15) putchar('\n');
|
printf("0x%02x,", code[i]); if ((i % 16) == 15) putchar('\n');
|
||||||
}
|
}
|
||||||
puts("\n};");
|
puts("\n};");
|
||||||
#ifndef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
puts("#include <windows.h>");
|
||||||
|
#else
|
||||||
puts("#include <unistd.h>");
|
puts("#include <unistd.h>");
|
||||||
puts("#include <sys/mman.h>");
|
puts("#include <sys/mman.h>");
|
||||||
#endif
|
#endif
|
||||||
puts("main()\n{");
|
puts("int main()\n{");
|
||||||
#ifndef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
puts("\tDWORD oldProtect;");
|
||||||
|
puts("\tVirtualProtect((void*)code, sizeof(code), PAGE_EXECUTE_READWRITE, &oldProtect);");
|
||||||
|
#else
|
||||||
puts("\tlong pageSize = sysconf(_SC_PAGESIZE) - 1;");
|
puts("\tlong pageSize = sysconf(_SC_PAGESIZE) - 1;");
|
||||||
puts("\tmprotect((void*)code, (sizeof(code) + pageSize) & ~pageSize, PROT_READ | PROT_EXEC);");
|
puts("\tmprotect((void*)code, (sizeof(code) + pageSize) & ~pageSize, PROT_READ | PROT_EXEC);");
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue