当前位置: 首页 > news >正文

function reorder in binary

main.c

#include <stdio.h>void funcA() {printf("This is funcA\n");
}void funcB() {printf("This is funcB\n");
}int main() {funcB();funcA();return 0;
}

linker.ld

SECTIONS {. = 0x08000000;/* 可执行段:.text */.text : ALIGN(4){*(.text.funcB)*(.text.funcA)*(.text.main)*(.text*)} :text/* 只读数据段:.rodata */.rodata : ALIGN(4) {*(.rodata*)} :rodata/* 可读写段:.data */.data : ALIGN(4) {*(.data*)} :data/* 未初始化的段:.bss */.bss : ALIGN(4) {*(.bss*)} :data/DISCARD/ : { *(.note.GNU-stack) }
}/* 定义段权限 */
PHDRS {text PT_LOAD FLAGS(5);    /* R + X */rodata PT_LOAD FLAGS(4);  /* R */data PT_LOAD FLAGS(6);    /* R + W */
}

build.sh

#!/bin/bash# 编译,开启 -ffunction-sections 让每个函数落在不同 section
gcc -ffunction-sections -c main.c -o main.o# 使用自定义链接脚本链接,控制函数顺序
gcc main.o -Wl,-T,linker.ld -o mybinary# 使用 nm 查看最终函数地址顺序
echo "Function order in binary:"
nm -n mybinary | grep ' T '
objdump -h main.o | grep func4 .text.funcA   0000001a  0000000000000000  0000000000000000  0000005c  2**05 .text.funcB   0000001a  0000000000000000  0000000000000000  00000076  2**0
http://www.xdnf.cn/news/714745.html

相关文章:

  • 支持selenium的chrome driver更新到137.0.7151.55
  • 如何选择适合团队的项目管理工具
  • 替代ADS1299的LH7909芯片应用方案
  • Linux系统文件描述符限制配置指南
  • DNS缓存
  • 路由器、网关和光猫三种设备有啥区别?
  • springboot面试题
  • meilisearch docker 简单安装
  • 基于Docker和YARN的大数据环境部署实践最新版
  • kafka 常用知识点
  • 4. Qt对话框(2)
  • [网页五子棋][匹配模块]用户管理器可能存在的问题以及解决办法(线程安全、多开问题)
  • Leetcode 2921. 价格递增的最大利润三元组 II
  • 知识课堂|sCMOS相机可编程快门模式解析
  • 2.2 在javaweb开发中常见后缀文件名的简单理解
  • 9.4 Q1|复旦大学CHARLS发文 | 老年人肌肉减少症和轻度认知障碍
  • Java 实现下载指定minio目录下的所有内容到本机
  • 深入解析注解框架实现原理:从源码到实战
  • 【下拉选项数据管理优化实践:从硬编码到高扩展性架构】
  • Jetson nx下realsense相机系统重启后找不到相机,需要重新插拔usb口问题解决办法
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题
  • 云渲染农场行业需求,如何搭建,有什么用途?
  • CDN安全加速:HTTPS加密最佳配置方案
  • C# Costura.Fody 排除多个指定dll
  • T5和GPT哪个更强大
  • C语言的函数调用,允许参数缺省和乱序
  • 通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别
  • Python中re模块结合正则表达式的应用
  • 企业文件乱、传输慢?用群晖 NAS 构建安全高效的共享系统
  • Codejock ToolkitPro 与 BCGControlBar Pro 深度对比