程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LAC : The secret of ld2

LAC : The secret of ld2

編輯:C++入門知識

這幾個晚上(周末除外)都在分解Lingoes-Extractor作者的另外一個工程的代碼, 同樣是用於分析LD2文件的,但僅僅一個java文件就搞定了,對於我這樣的JAVA初學者來說真是'太好了'...
   
    從第一次找到Extractor的代碼起,我就一直很懷疑這位作者要不跟Lingoes有點關系,要不就是一位真正的破解大師...因為Extractor太完美了...代碼不多,卻非常清晰地標記並分解出了LD2的各個段的數據,以及數據間的關系...我的懷疑來自其對ld2文件格式的認識,每一段,每一個字節的意義都非常地准確地標示出來,更神奇的是那些'無從追蹤'的魔數, 例如, 單詞索引間隔固定為10, 14字節的索引數據塊,等等...這些都是怎麼推到出來的啊...

    我對自己的懷疑更偏向於後者,因為通過查看作者的其他代碼,其除了分解了ld2文件外,還包括其他多個詞典的數據文件...(感到震驚的同學們,自己去圍觀吧...另,多說一句,googlecode.com是個好地方...)

    我並不關心懷疑本身的答案, 因為我已經非常開心 --Extractor終讓我有機會窺視到Lingoes的ld2文件的秘密...

    貼段代碼, 以'獎勵'自己多夜的敲敲打打...(是我寫的Java代碼,表認真啊...)

    private static void getData(final int index) throws IOException {

        RandomAccessFile file = new RandomAccessFile("output.data", "r");
        final ByteBuffer buf = ByteBuffer.allocate((int) file.getChannel().size());
        file.getChannel().read(buf);
        buf.order(ByteOrder.LITTLE_ENDIAN);
        int offset = 29;
        final int idx[] = new int[6];//       
        getIndex(buf, offset * 10, idx);

        if(idx[5] != idx[1]) {
            Output("self xml = " + getXml(buf, idx[1], idx[5] - idx[1]));
        }
        if(idx[3] == 0) {
            Output("word = " + getWord(buf, idx[0], idx[4] - idx[0]));
        }
        else {
            int ref = idx[3];
            int offsetword = idx[0];
            final int lenword = idx[4] - idx[0];
           
            while(ref -- > 0) {
                offset = buf.getInt(lenInflatedWordsIndex + idx[0]);
                getIndex(buf, offset * 10, idx);
                Output("ref(" + offset + ") xml = " + getXml(buf, idx[1], idx[5] - idx[1]));
                offsetword += 4;
            }
            Output("word = " + getWord(buf, offsetword, lenword));
        }

        file.close();
    }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved