簡単に言うと、ELF バイナリの .text セクションを 1 つの関数で表す整数の配列があります。この機能を実行したい。コマンドを実行する前に、次のコマンドを実行しました。
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