C-错误尝试通过malloc创建功能



我尝试以一种奇怪的方式来发挥功能,但我相信存在一种方法。我尝试创建函数fn()= 1;

int fn()
{
     return 0;
}

然后我尝试对其进行编译而无需拆卸

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("ok1n");//check
    f0=ptr.d;
printf("ok2n");//check
    printf("fn=%dn",f0());
printf("ok3n");//check
    return 0;
}

,但结果是:

ok1
ok2
Segmentation fault (core dumped)

它不起作用,因为您无法将指针类型混合在C(一种强大的语言)中。此外,C根本不允许混合代码和数据。你想要那个?尝试LISP。

相关内容

最新更新