C 中的间接函数调用,无需使用缓冲区溢出进行显式调用

问题描述 投票:0回答:1

我正在做一个 C 编程练习,我需要间接调用一个函数,而不是通过名称或通过用户输入对其进行显式调用。挑战在于理解如何在不显式编写函数调用或仅使用指针操作返回的情况下操纵控制流。

这是我正在处理的代码的简化版本:

#include <stdio.h>

void targetFunction(int value) {
    printf("Value is: %d\n", value);
}

void callerFunction() {
    // Placeholder for the solution
    /* The goal is to call targetFunction with a specific value here */
}

int main() {
    callerFunction();
    return 0;
}

目标是从

targetFunction
内部使用预定参数调用
callerFunction
。要求是间接执行
targetFunction(42)
。该解决方案应涉及指针操作,这些操作会改变程序的执行流程,以使用值
targetFunction
作为其参数来调用
42

如何在不使用显式函数调用、函数指针或任何形式的用户输入的情况下操作指针或堆栈来实现此目的?是否可以在标准 C 中执行此操作,或者是否需要特定的编译器扩展或内联汇编?有人告诉我 objdump 在这种情况下会很有帮助。

c buffer-overflow objdump cdecl
1个回答
0
投票

我不确定你是否真的需要任何“操纵”,但如果你这样做,这将是一种方式:

#include <stdio.h>

void targetFunction(int value) {
    printf("Value is: %d\n", value);
}

typedef void(*fp)(int);

void callerFunction(fp f) {
    f(42);
}

int main() {
    callerFunction(targetFunction);
}
© www.soinside.com 2019 - 2024. All rights reserved.