#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
int main() {
unsigned char code[] = {// 机器码
0x55,
0x48, 0x89, 0xe5,
0x89, 0x7d, 0xfc,
0x89, 0x75, 0xf8,
0x8b, 0x45, 0xfc,
0x0f, 0xaf, 0x45, 0xf8,
0x5d,
0xc3
};
// 分配一段内存(可写可执行),存储机器码
void *mem = mmap(NULL, sizeof(code),
PROT_WRITE | PROT_EXEC,MAP_ANON | MAP_PRIVATE, -1, 0);
// 将机器码存入内存中
memcpy(mem, code, sizeof(code));
// 类型转换,将内存转换成函数指针
int (*fun)() = mem;
printf("2*2 = %d\n", fun(2, 2));
// 释放分配的内存
munmap(mem, sizeof(code));
}
csapp-C程序中执行机器码
最新推荐文章于 2022-11-04 23:40:24 发布