2012-05-06 67 views
0

我正在編寫一個Sparc V8的C++模擬模型。內存被簡單地建模爲一個數組。 我需要讀取由交叉編譯器生成的elf-executable,並使用它來初始化內存。我打算如下做。精靈模擬內存圖像

sparc-elf-readelf --hex-dump=.text --hex-dump=.rodata --hex-dump=.data <elf-file> > dump.txt 
grep "0x" dump.txt >dump2.txt 

這產生(地址,字,詞詞)格式的文本文件看起來像這樣:

0x00000000 88100000 09000000 81c120b0 01000000 .......... ..... 
    0x00000010 91d02000 01000000 01000000 01000000 .. ............. 
    0x00000020 91d02000 01000000 01000000 01000000 .. ............. 
    0x00000030 91d02000 01000000 01000000 01000000 .. ............. 
    0x00000040 91d02000 01000000 01000000 01000000 .. ............. 
    0x00000050 a1480000 29000000 81c521a8 01000000 .H..).....!..... 
    0x00000060 a1480000 29000000 81c52220 01000000 .H..)....." .... 
    0x00000070 91d02000 01000000 01000000 01000000 .. ............. 
    ... 

問:什麼是最後一列的所有的點?

問:有沒有更好的方法從elf可執行文件生成內存映像?我想我只需要爲.text,.RODATA和。數據部分

感謝複製的任何建議

+2

elf文件很容易閱讀,不需要庫,只是得到它具有文件使用的結構的規格。我有幾個用於不同處理器的精靈解析器http://github.com/dwelch67我認爲msp430sim和amber_samples可能使用精靈解析器。小精靈適用於您的處理器,比較反彙編和您提取的內容。 –

+1

這些點只是用來表示不可打印的字符;只有可打印的ASCII字符在最後一列顯示爲自己。 –

回答

2

Q: What are all the dots in the last column?

歐內斯特說,他們是不可打印的字符。也就是說,每個字節都不適合7位(不是ASCII碼)或低於0x20(控制ASCII字符)。

Q: Is there a better way to generate a memory image from the elf executable? I think I need to copy only the .text, .rodata and .data sections

你的方法根本不起作用。 ELF格式不僅僅是提供關於部分在內存中的位置的信息;它還包含解決動態符號和重定位的說明。你需要的是之後的裝載機活動已經發生。

我建議您閱讀ELF specification和適用於SPARC的附錄。 如果您不是僅僅爲了教育目的而開始這個項目,我還建議您使用任何現有的平臺和應用程序仿真器,如QEMU