我需要額外的初始化動態鏈接應用程序中的現有。如何在已編譯的應用程序中替換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