我尝试用一种奇怪的方式制作一个函数,但我相信有一种方法可以做到这一点。 我尝试创建函数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)
答案 0 :(得分:-3)
它不会起作用,因为你不能在c(强类型语言)中混合指针类型。而且,c根本不允许混合代码和数据。你想要那个?试试lisp。