我试图通过更改此代码中函数的返回地址来更改程序执行流程:
void s(int signum) {
int b = 1;
*(&b+3) = *(&b+3) + 4;
}
void f() {
while(true);
printf("f exit\n");
}
int main() {
signal( SIGCONT, s );
f();
printf("end of prog");
return 0;
}
为此,我调用f函数。所以它卡在while(true). 然后我使用命令SIGCONT向程序发送信号。kill -SIGCONT <PID>现在程序必须中断执行while(true)并f执行s函数。在s函数中,我定义了在运行时堆栈中b查找函数的返回地址,即. 我尝试更改此值,以便当它返回时,跳过执行并执行。但它一直卡在我不知道如何使这项工作。s*(&b+3)*(&b+3) = *(&b+3) + 4fwhile(true)printf("f exit\n")while
注意:我通过将 *(&b+3) 与之前 __builtin_return_address(0) 返回的值进行比较来验证它是返回地址。
函数体main必须f保持不变。
谢谢。