我正在读一本书,其中有一个用C编写的程序来执行shellcode。我复制了它,但它不起作用,所以我试图解决它。我发现我应该使用mmap func动态分配内存,并获得适当的权限,但它也不起作用。以下是asm文件的示例:
TEST.ASM: xor eax,eax mov eax,1
然后我用“nasm -o test test.S
编译它然后为了调用asm模块,本书在C中实现了以下代码:
void *code;
void (*func) (void); // pointer to function
code = malloc(funcLen); // funcLen, size of asm file compiled
FILE *fp = fopen("test", "rb");
fread(code,1, funcLen, fp);
func = (void (*) (void)) code;
(*fptr) ();
但是当我运行它时,它会抛出错误“Segmentation fault(code dump)”。所以我环顾四周找到了mmap函数,代码结束了:
void *code;
void (*func) (void); // pointer to function
code = mmap(NULL, funcLen, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS, -1, 0); // funcLen, size of asm file compiled
FILE *fp = fopen("test", "rb");
fread(code,1, funcLen, fp);
func = (void (*) (void)) code;
(*fptr) ();
这仍然不起作用,我如何使用执行权限设置内存? 谢谢