使用指向asm文件的函数?

时间:2014-02-17 21:07:34

标签: c++ c

我正在读一本书,其中有一个用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) ();

这仍然不起作用,我如何使用执行权限设置内存? 谢谢

0 个答案:

没有答案