[問題] 關於函數大小與機器碼
請問有沒有辦法在不內聯組合語言的情況下從
C/C++ 查看函數的機器碼與大小?
之前有嘗試過用函數指標配 While 去輸出機器碼,
用的方法是讀到 0xC3 (ret) 停止,不過算是個爛方法吧。
請問有沒有更好的方法來達到這項功能?
--
Sent from my Windows7
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.252.0.226
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1427625578.A.148.html
※ 編輯: NilPtr (111.252.0.226), 03/29/2015 18:40:16
推
03/29 18:43, , 1F
03/29 18:43, 1F
觀察不同CPU的架構與編譯器生成出的機器碼,配著指令編碼表服用...
打算弄個能夠即時生成x86機器碼然後運型的程式庫吧,
類似 GNU Lightning 、 NanoJIT 的小玩具
※ 編輯: NilPtr (111.252.0.226), 03/29/2015 18:56:27
→
03/29 19:12, , 2F
03/29 19:12, 2F
→
03/29 19:12, , 3F
03/29 19:12, 3F
→
03/29 19:12, , 4F
03/29 19:12, 4F
感謝資訊提供
→
03/29 19:16, , 5F
03/29 19:16, 5F
→
03/29 19:17, , 6F
03/29 19:17, 6F
→
03/29 19:18, , 7F
03/29 19:18, 7F
→
03/29 19:18, , 8F
03/29 19:18, 8F
→
03/29 19:19, , 9F
03/29 19:19, 9F
→
03/29 19:25, , 10F
03/29 19:25, 10F
我都忘了還有 objdump 這指令還能用 ( 跪
感謝短網址,之前也稍微翻過Intel的官方文檔
不過還是想看一般編譯器編出來的東西是長怎樣
→
03/29 20:02, , 11F
03/29 20:02, 11F
類似,但是不是 Debugger :D
→
03/29 20:11, , 12F
03/29 20:11, 12F
正解 ! 而且為了增加樂趣而不用現成的虛擬機
只能看著 LLVM、JVM、MONO 之類的東西流口水
主要是想要實現一個程式語言虛擬機
前端 (詞法分析語法分析) 的話反而沒太大興趣
不過這不是工業或學術項目,只是用來打發時間用的玩具 :D
※ 編輯: NilPtr (111.252.0.226), 03/29/2015 20:59:14
→
03/29 22:57, , 13F
03/29 22:57, 13F
→
03/29 22:58, , 14F
03/29 22:58, 14F
→
03/29 22:59, , 15F
03/29 22:59, 15F
讀 c3 真的是很蠢的方法 XD
→
03/29 23:17, , 16F
03/29 23:17, 16F
→
03/29 23:17, , 17F
03/29 23:17, 17F
原來如此,所以說沒辦法確定已經連結後的可執行檔中函數佔了多少的大小嗎?
→
03/30 00:24, , 18F
03/30 00:24, 18F
→
03/30 00:25, , 19F
03/30 00:25, 19F
→
03/30 00:25, , 20F
03/30 00:25, 20F
只好去啃Intel手冊了,Intel編碼的方式有點讓我搞不太清楚
同時也參考 NanoJIT 或 DynASM 人家怎麼寫好了
→
03/30 00:26, , 21F
03/30 00:26, 21F
→
03/30 17:26, , 22F
03/30 17:26, 22F
→
03/30 17:26, , 23F
03/30 17:26, 23F
※ 編輯: NilPtr (111.252.0.226), 03/30/2015 19:30:48
推
03/30 19:49, , 24F
03/30 19:49, 24F
→
03/30 19:51, , 25F
03/30 19:51, 25F
→
03/30 19:53, , 26F
03/30 19:53, 26F
ARM 指令沒 X86 這麼恐怖,可以考慮先從低等的怪開始打 XDD
記憶體管理的話用 GC + Memory Pool,各種CG演算法也是樂趣所在 :D
要用的時候再用C/C++分配給動態生成的指令去處理吧,應該沒太大問題
這是一個要先把計算機架構、作業系統、編譯原理全都讀過一次的節奏,越級打怪...XD
※ 編輯: NilPtr (111.252.0.226), 03/30/2015 20:29:50
推
03/30 20:58, , 27F
03/30 20:58, 27F
→
03/30 22:34, , 28F
03/30 22:34, 28F
→
03/31 10:16, , 29F
03/31 10:16, 29F
→
03/31 10:17, , 30F
03/31 10:17, 30F
→
03/31 10:18, , 31F
03/31 10:18, 31F
→
03/31 10:20, , 32F
03/31 10:20, 32F
→
04/01 18:33, , 33F
04/01 18:33, 33F
→
04/01 18:34, , 34F
04/01 18:34, 34F
→
04/01 20:08, , 35F
04/01 20:08, 35F
→
04/01 22:31, , 36F
04/01 22:31, 36F
→
04/01 22:32, , 37F
04/01 22:32, 37F
→
04/01 23:52, , 38F
04/01 23:52, 38F
→
04/01 23:53, , 39F
04/01 23:53, 39F
→
04/01 23:53, , 40F
04/01 23:53, 40F
→
04/03 05:36, , 41F
04/03 05:36, 41F
→
04/03 09:16, , 42F
04/03 09:16, 42F
感謝 king19880326大大 與 azureblaze大大解答
※ 編輯: NilPtr (36.232.169.94), 04/03/2015 22:06:20