Linux 中可执行堆栈的示例(i386 架构)

2024-02-26

我发现当我们使用嵌套函数 http://en.wikipedia.org/wiki/Nested_function, GCC 需要一个可执行堆栈蹦床代码 http://gcc.gnu.org/onlinedocs/gccint/Trampolines.html。但是,使用 gcc 编译时,以下代码不会显示可执行堆栈。 (我用了执行堆栈 http://linux.die.net/man/8/execstack验证堆栈是否可执行)

#include <stdio.h>
#include <unistd.h>

int main()
{
        int add( int a, int b)
        {
                return a + b;
        }
        return add(2, 3);
}

为什么这不会产生可执行堆栈?如果不应该,那么有人可以给出代码构造的示例吗does给出一个可执行堆栈?


如果嵌套函数根本不依赖于其“父”堆栈,那么它只是一个普通函数 - 嵌套是语法(和范围)糖。

如果您不获取嵌套函数的地址,则也不需要蹦床代码。所以你需要更多的东西来触发这一切。

这是一个虚拟示例:

// file t.c
int doit(int (*fun)(int), int x)
{
    return fun(x);
}

int foo(int a)
{
        int add(int b)
        {
                return a + b;
        }
        return doit(&add, 2);
}

int main(void)
{
    return foo(1);
}
$ gcc -Wtrampolines t.c
t.c: In function 'foo':
t.c:8:13: warning: trampoline generated for nested function 'add'
$ ./a.out 
$ echo $?
3
$ execstack a.out 
X a.out
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中可执行堆栈的示例(i386 架构) 的相关文章

随机推荐

  • css动画持久结束状态

    我有一个 div 元素 它充当我的网页的全局容器 我在其中也有一个 div 元素 我将其用作窗帘 即当它被激活时 它会在黑暗的半透明层中覆盖整个页面 就像灯箱一样 因此该页面基本上已停用 并且可以在顶部显示警告对话框或图片框等 我可以使用j
  • 将特定的MDC字段附加到logstash日志中

    我正在尝试将自定义字段添加到 logback spring xml 中的 Logstash Appender 中 如下所示
  • Mongoose 填充包含 ref 的对象数组

    我有一个带有数组的猫鼬模式lists由对另一个集合的引用和嵌套的数字数组组成的对象 var Schema exports mongoose schema mongoose require mongoose Schema mongoose S
  • 构造函数注入——我们也注入工厂吗?

    听完后整洁代码讲座 https www youtube com playlist list PL693EFD059797C21E 我开始明白我们应该使用工厂来组合对象 因此 举例来说 如果House has a Door and a Doo
  • Camel 中的无限循环 - Rabbitmq

    我有一个小型服务器路由 它从queue in 获取消息并放入queue out 当我输入一条消息时queue in 服务器无限循环运行 我想知道我在配置方面缺少什么 这看起来是一条非常简单的路线 小服务器路由
  • IntelliJ 找不到 Scanner 类 [重复]

    这个问题在这里已经有答案了 我正在使用 Intellij IDEA 这是我的代码 public static void main String args java util Scanner scanner new java util Sca
  • 如何在Python中使用多线程时获得更快的速度

    现在我正在研究如何尽快从网站获取数据 为了获得更快的速度 我正在考虑使用多线程 这是我用来测试多线程和简单帖子之间差异的代码 import threading import time import urllib import urllib2
  • 如何在 Firefox 3.0 的 Javascript 中调用 Web 服务

    我在使用 Firefox 调用 Net Web 服务时遇到问题 客户 一个简单的例子对我来说就足够了 服务器端代码是这样的 WebService Namespace http tempuri org WebServiceBinding Co
  • 下一个可用记录 ID

    user User new user id返回零 但我需要在保存之前知道它 是否可以 是的你可以 我有同样的问题并调查了文档 能否解决这个问题其实和你的数据库类型有很大关系 Oracle and PostgreSQL确实有有用的功能可以轻松
  • RSA-OAEP SHA-512 加密/解密从 Javascriptwebcrypt api 到 PHP openssl?

    我一直忙于尝试使用 webcrypto api 和使用 openssl 的 PHP 服务器在浏览器客户端之间建立安全交换 我已经尽可能地分解了 事情 我编写了一些 javascript 来生成密钥对 打印出私有值和公共值 加密一个简单的字符
  • 过滤所有查询(试图实现软删除)

    我正在尝试在 EF Core 2 0 中实现软删除行为 public interface ISoftDeleteModel bool IsDeleted get set 创建正确的列和软删除工作正常 但从 DbContext 过滤实体则不然
  • 为什么从 iPhone 模拟器发送文件到 watchOS2 模拟器不起作用?

    我试图将数据库从 iOS 9 iPhone 复制到 watchOS 2 Apple Watch 两个模拟器 但什么也没有 找不到文件 到处搜查 我想在从 iPhone 输入应用程序到 Apple Watch 时传输数据库 即使仅 iPhon
  • 如何设置目录分隔符以匹配操作系统?

    我正在编写一个 qt 应用程序 目标是可移植到 3 个主要操作系统 我正在使用 QFileDialog 选择一个文件夹 然后将其添加到 QListWidget 中 然而 即使我在 Windows 上 文件夹名称也会返回为 E media 我
  • Java Toolkit 屏幕分辨率降低

    我正在使用 java 来获取屏幕的尺寸和分辨率 当我运行以下代码时 我得到以下输出 Toolkit toolkit Toolkit getDefaultToolkit Dimension dim toolkit getScreenSize
  • 在 ubuntu 上的 R 中使用 cairo 设备时出错

    我正在开罗设备上工作 我正在生成 cairo pdf 并收到如下所示的错误消息 cairo pdf DATA Warning messages 1 In cairo pdf DATA unable to load shared object
  • 同时显示同一文档的多个视图

    如何说服 MFC 文档 视图体系结构让我同时显示同一文档的两个不同视图 例如 说我的CDocument子类代表某种描述的档案 我想要一个用户界面 其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中 而当前所选条目的详
  • Python:函数需要 1 个位置参数,但给出了 2 个位置参数,怎么办?

    我正在用 Tk 用 python 创建一个数独游戏 我收到关于按钮按键功能的错误 from random import randint from tkinter import class sudoku global root result
  • Visual Studio Code - 多个屏幕中同一项目的选项卡(编辑器)

    使用多个屏幕 我通常将多个类 文件 放置在不同的屏幕中 这在重构 检查测试和比较更改时对我有很大帮助 Visual Studio Code 不允许我将选项卡拖到窗口外并在 例如 另一个监视器中查看它 我检查了文档和插件 但我发现的唯一方法是
  • random.choice 被字典破坏

    The random choice输入应该是sequence https docs python org 3 glossary html term iterable 这会导致奇怪的行为dict 它不是序列类型 但可以像这样使用下标 gt g
  • Linux 中可执行堆栈的示例(i386 架构)

    我发现当我们使用嵌套函数 http en wikipedia org wiki Nested function GCC 需要一个可执行堆栈蹦床代码 http gcc gnu org onlinedocs gccint Trampolines