小编Jus*_*tin的帖子

在C中进行堆栈操作而不使用内联汇编

我一直在准备编码竞赛,并在互联网上遇到了这个问题:

#include <stdio.h>

void a(); 
void b(); 
void c();

int main() { a(); printf("\n"); return 0; }

void a() { b(); printf("hi "); }

void b() { c(); printf("there "); }

void c()
{
    int x;
    // code here and nowhere else
}
Run Code Online (Sandbox Code Playgroud)

解决方案是编写将打印出"hi there"而不是"there hi"的代码(不能使用额外的打印功能,代码只能放在注释块中).

由于我已经完成了一些基本的汇编代码,我意识到这可以通过使用整数x作为基础的堆栈操作来完成.

我试图用gdb找到的函数的返回地址,然后交换的返回地址ab.编译器抛出了一个分段错误,因此我假设我没有使用正确的返回地址.

如何正确计算偏移量以找到返回地址?gdb上的信息框架命令没有帮助,因为使用给定的堆栈地址值不起作用.

我在Linux上使用gcc运行它.

c

9
推荐指数
2
解决办法
943
查看次数

标签 统计

c ×1