在我的arm动态加载实验中需要解决一个模块调用系统函数的问题,可以使用以下的一个方法。将系统函数固定在某一段地址空间,然后导出这一块的符号表到符号文件中,要记载的模块link的时候使用这个符号表文件,即可以实现模块调用系统函数的问题。

  在stm32上做了以下实验,kernel导出一个系统函数void syscall_printf(void),然后模块调用。

 syscall.c

 #include <stdio.h>
void syscall_printf(void)
{
printf(“syscall_printf.\n”); }

链接生成kernel的时候指定

--keep=syscall_printf保证在kernel没有使用syscall时候,link不删除syscall_printf函数。

--symdefs=syscall.sym 生成syscall.sym供模块链接使用。

有关映像符号使用请参照arm官方文档DUI0206IC_rvct_link_user_guide.pdf。生成的syscall.sym文件实际上是一个文本文件,里面包含了符号信息,比如函数名及地址,全局变量名及地址等,将syscall.sym不需要导出给模块使用的符号信息删除掉。

在模块中可以直接调用syscall_printf,只需在链接的时候将syscall.sym文件作为输入文件参与链接过程即可。

参照这个方法,可以在一个固定地址空间存放系统函数,然后做成一个系统函数表,生成相应的符号给到模块使用即可。

最新文章

  1. PowerShell中的基础数据类型
  2. Python_Day8_面向对象编程进阶
  3. appium 1.6.3+Xcode运 For Mac
  4. DirectShow .Net 实现视频
  5. 将自己写的库上传到cocoapods(2015)
  6. async 更优雅异步体验
  7. Mac系统搭建Go语言Sublime Text 2环境配置
  8. C++11 多线程
  9. 2016041601 - linux上安装maven
  10. web系统
  11. Android文字的复制和粘贴
  12. codeforces 659C Tanya and Toys
  13. 微信小程序开发者工具集合包
  14. 安卓UDP通信2
  15. spring-mvc报红错误
  16. kubernetes 构架
  17. 第三十四节,目标检测之谷歌Object Detection API源码解析
  18. 转-CSRF——攻击与防御
  19. HTTPS简单原理介绍
  20. cleanCode[2]:函数编写的几大规则

热门文章

  1. HDU 2685 I won&#39;t tell you this is about number theory
  2. 再看static数据成员
  3. QF——关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
  4. select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ASC )P)M WHERE M.RN&gt;2 and M.RN &lt;= 7
  5. Hibernate之总结
  6. iphone:自定义UIAlertView
  7. 【Linux指令】使用中学习(一)
  8. mybatis.generator.configurationFile
  9. Ubuntu下,在Eclipse中使用JNI调用ffmpeg
  10. Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建