长话短说,我有一个整数数组,它表示具有一个函数的 ELF 二进制文件的 .text 部分。我想执行这个功能。在尝试执行命令之前,我已经运行了这个命令:
mprotect(function, sHeader.sh_size, PROT_EXEC | PROT_READ | PROT_WRITE);
认为它可能会解决权限问题,但是当我尝试运行它时它仍然会出现段错误:
int (*fp)(int, int) = (int (*)(int, int))getFunc("t.o");
int a = 2;
int b = 3;
cout << fp(a, b) << "\n";
但是当我尝试运行它时它仍然会出现段错误:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000603010 in ?? ()
有什么我错过的吗?
我正在尝试执行的函数的 objdump:
0000000000000000 <mult>:
mult():
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 89 75 f8 mov %esi,-0x8(%rbp)
a: 8b 45 fc mov -0x4(%rbp),%eax
d: 0f af 45 f8 imul -0x8(%rbp),%eax
11: 5d pop %rbp
12: c3 retq