2016-12-07 83 views
1

我有點困惑,OMF對象格式的PUBDEF記錄。 我的彙編程序生成了一個結果,表明記錄是4000字節,當它顯然不是這樣的時候,它爲什麼會這樣做?OMF(目標模塊格式)長度字段顯示不正確

Image of Hex view of OMF

的0XA0和爲0x0F是小尾數格式的記錄長度,

請查看specificaiton:http://pierrelib.pagesperso-orange.fr/exec_formats/OMF_v1.1.pdf

這似乎也說明,該字符串的長度爲0字節在一個點上甚至只有零串長度而沒有提供串。也許我正在閱讀文件錯誤?我已經花了數小時,並且掙扎着。

如果任何人都可以幫我解決我的問題,因爲我正在編寫鏈接器,如果不理解這一點,將無法繼續。

感謝

+0

我發現0x0f是直到字符串結尾的偏移量,但這沒有意義,因爲規範清楚地顯示0x0a和0x0f是表示記錄大小的小端序列短。 – NibbleBits

+0

你在[這個問題](http://stackoverflow.com/q/41418521/968261)中問我這裏看看。服用。我對OMF不是很熟悉。但是,考慮到它被問到的上下文(對於定製編譯器),我可能會提議查看ELF。在我的[更小的C編譯器](https://github.com/alexfru/SmallerC)中,我將32位和16位組合到ELF對象文件中。從他們中,我可以爲DOS生成可執行文件(微型模型.COM,小型和巨大模型.EXE,DPMI和虛幻模式EXE),Windows(PE),Linux(ELF)和平面二進制文件。不過,我確實有一個自定義鏈接器。 –

+0

廣告LNAMES你沒有錯,第一個字符串確實有故意零大小。例如,帶有空的類名的段引用它。 – vitsoft

回答

1

有文件中沒有PUBDEF記錄。你似乎失算了以前的記錄尺寸:

0000:80 THEADR 
000e:88 CoMENT 
0032:96 LNAMES 
0041:98 SEGDEF 
004B:98 SEGDEF 
0055:88 COMENT 
005C:a0 LEDATA 
006E:a0 LEDATA 
007b:8a MODEND 

學會使用OMF檢查更sofisticated工具,如Tdump.exe或ODU.exe。

+0

您是否有任何鏈接,您提供的示例可執行文件似乎無法在Windows 10上運行。我假定它適用於Win 98及更低版本。你可以給我提供一些鏈接:) – NibbleBits

+1

@NibbleBits我使用的是Sven B. Schreiber的Object File Dumper,公共領域,類似的產品可以在https://sourceforge.net/projects/jwasm.hx-dos上找到。 p/files/DumpOmf16.zip/download Tdump是Borland的商業軟件,附帶Turbo產品,可能作爲放棄軟件提供,詳見http://docwiki.embarcadero.com/RADStudio/Seattle/en/TDUMP.EXE,_the_File_Dumping_Utility – vitsoft

+0

非常感謝 – NibbleBits