2012-09-01 60 views
5

我有一個類文件,當我在網站上下面的消息來了:在類文件「譜」不兼容的魔法值1768713317類文件

不兼容的魔法值1768713317。

這個魔法值是什麼意思?請幫助:)

+0

你從哪裏找到它的? –

+0

你在哪個網站?班級文件在網站上做什麼? – gefei

+0

該網站目前尚未公開。我可以給你發一封郵件嗎? – narf

回答

10

前四個字節0​​文件(編譯的Java二進制)應該是0xCAFEBABE - 所謂魔法值

根據你的情況,這些都是ASCII 17687133170x696C6C65"ille"伊勒......加侖?)。很可能有些JVM試圖打開一個文件,認爲這是字節碼,而它實際上是一個文本文件。也許類是假設被下載,但服務器返回一些錯誤,而不是?

+0

對不起這個問題,但是非法是什麼意思?我必須在哪裏添加魔法值? – narf

+0

@narf:這意味着某些JVM試圖加載一個不是真正編譯Java的類,但可能是一些文本文件。如果您拍攝JPG圖片並將其擴展名更改爲.EXE,則很可能會出現某種錯誤。對不起,你的問題太模糊了,你能提供更多細節嗎? –

5

幻數是每個編譯的Java類的前4個字節。這是編譯的Java類的結構:

ClassFile { 
    u4    magic; 
    u2    minor_version; 
    u2    major_version; 
    u2    constant_pool_count; 
    cp_info  constant_pool[constant_pool_count-1]; 
    u2    access_flags; 
    u2    this_class; 
    u2    super_class; 
    u2    interfaces_count; 
    u2    interfaces[interfaces_count]; 
    u2    fields_count; 
    field_info  fields[fields_count]; 
    u2    methods_count; 
    method_info methods[methods_count]; 
    u2    attributes_count; 
    attribute_info attributes[attributes_count]; 
} 

「魔力」應始終等於:0xCAFEBABE。它告訴JVM:「嘿,你好!我是Java類,你可以執行我的代碼!」。當JVM讀取文件並且幻數無效時,它將不會執行它。

+0

獲取此輸出的命令是什麼? – Reimeus

+0

這不是輸出。此結構取自JVM規範:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.1 –

+0

感謝此 - +1 btw :) – Reimeus