我需要额外的初始化动态链接应用程序中的现有。如何在已编译的应用程序中替换main()?
1
A
回答
4
如果你想在一个已经编译运行main()
前勾额外的代码程序,你可以使用constructor
属性的组合,和LD_PRELOAD
像这样:
#include <stdio.h>
void __attribute__((constructor)) init() {
printf("Hello, world!\n");
}
编译并运行:
$ gcc -shared demo_print.c -o demo_print.so -fPIC
$ LD_PRELOAD=$PWD/demo_print.so true
Hello, world!
如果您根本不想正常运行main()
,只需在main()
运行前终止(使用exit()
等)。请注意,您将无法实际获得main()
的地址以手动调用 - 只需从构造函数返回即可继续正常启动。
1
如果你正在编写需要特定的启动初始化共享库,你可以使用GCC“构造”扩展名:
void foo() __attribute__ ((constructor))
相关问题
- 1. 用已编译的lambda替换Activator.CreateInstance
- 2. 如何从APK编辑已编译的Android应用程序类
- 3. 如何编译Django应用程序的setup.py中的gettext转换
- 4. 在已编译的应用程序中查找SQL查询
- 5. 如何为已编译的ASP.NET应用程序指定程序集文件名?
- 6. 已编译的iOS应用程序(IPA)中的内容加密
- 7. 已编译的应用程序中的Matlab网络浏览器
- 8. Chrome中的fileEntry.toURL()替换件已包装的应用程序
- 9. 编译并运行没有main()的程序在C中为
- 10. 支持库是否已编译到我的应用程序中?
- 11. 将在jdk1.4中编译的应用程序转换为jdk1.7
- 12. 将已编译的应用程序迁移到基于Web的应用程序
- 13. 在WinForms应用程序中编译ASPX
- 14. 如何在xCode中为您的iPhone应用程序编译C++?
- 15. 如何在我的C++应用程序中编译sqlite3?
- 16. 如何在“基于导航的应用程序”中替换RootViewController
- 17. 如何在Web应用程序中替换Electron的IPC通道
- 18. 如何在Delphi IDE和编译应用程序中使用TBBMM
- 19. 如何编译OpenCV 2.2以在iPhone应用程序中使用?
- 20. 初始化程序列表中的编译时替换
- 21. 编译monodevelop中的web应用程序
- 22. 如何反编译在Xcode中部署应用程序
- 23. 如何在Perl应用程序中将'die'替换为'confess'?
- 24. 如何在Qt应用程序中替换'gluOrtho2d'
- 25. 更改已编译iPhone应用程序的.ipa文件图稿
- 26. 从Apple脚本生成已编译的应用程序
- 27. 未编译的用户控件在已编译的Web应用程序中运行
- 28. 如何在C中编译C程序?
- 29. 如何在Befunge-93中编译程序?
- 30. 如何在Go中编译程序
你想完成什么?我几乎可以向你保证,这是做错的方法。 – 2009-10-06 01:09:35
尝试玩LD_PRELOAD。我现在太累了以至于无法工作,但希望它能解决您的问题。注意Lutz提出的观点。 – 2009-10-06 01:33:25