错误尝试通过malloc创建函数

时间:2017-11-27 11:43:41

标签: c assembly memory-management jit

我尝试用一​​种奇怪的方式制作一个函数,但我相信有一种方法可以做到这一点。 我尝试创建函数fn()= 1;

int fn()
{
     return 0;
}

然后我尝试编译它而不用main然后反汇编

gcc -Wall -c fn.c
objdump -d ./a.out

结果是:

./fn.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <fn>:
0:  55                      push   %rbp
1:  48 89 e5                mov    %rsp,%rbp
4:  b8 01 00 00 00          mov    $0x1,%eax
9:  5d                      pop    %rbp
a:  c3                      retq 

然后我写了我的程序:

#include <stdio.h>
#include <stdlib.h>
union datas{
    char * v;
    int (*d)();
}ptr;

int main()
{
    int (*f0)();

    ptr.v=(char *)malloc(11);
    ptr.v[0]=0x55;
    ptr.v[1]=0x48;
    ptr.v[2]=0x89;
    ptr.v[3]=0xe5;
    ptr.v[4]=0xb8;
    ptr.v[5]=0x01;
    ptr.v[6]=0x00;
    ptr.v[7]=0x00;
    ptr.v[8]=0x00;
    ptr.v[9]=0x5d;
    ptr.v[10]=0xc3;
printf("ok1\n");//check
    f0=ptr.d;
printf("ok2\n");//check
    printf("fn=%d\n",f0());
printf("ok3\n");//check
    return 0;
}

但结果是:

ok1
ok2
Segmentation fault (core dumped)

1 个答案:

答案 0 :(得分:-3)

它不会起作用,因为你不能在c(强类型语言)中混合指针类型。而且,c根本不允许混合代码和数据。你想要那个?试试lisp。