小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)恢復(fù)(七)

 zjshzq 2024-12-26 發(fā)布于浙江

PDF(Portable Document Format)文件是一種用于文檔傳輸和顯示的文件格式,也是結(jié)構(gòu)性的文件。通過(guò)本文的分析,可以清楚PDF的文件結(jié)構(gòu)和對(duì)象尋址原理,對(duì)于PDF的文件修復(fù)思路也能有自己的見(jiàn)解。

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析

PDF文件結(jié)構(gòu)

PDF文件的結(jié)構(gòu)主要包括以下4個(gè)部分:

  1. 文件頭:
    PDF文件的開(kāi)頭包含一個(gè)文件頭,它標(biāo)識(shí)了文件的類(lèi)型和版本信息。
  2. 對(duì)象:
    PDF文件中的所有內(nèi)容都被表示為對(duì)象,這些對(duì)象可以是文本、圖像、矢量圖形等。每個(gè)對(duì)象都有一個(gè)唯一的編號(hào),以及一些描述該對(duì)象的信息。
  3. 交叉引用表(xref):
    PDF文件通常包含一個(gè)交叉引用表,它記錄了PDF文件中所有對(duì)象的位置和編號(hào)。這些對(duì)象包括頁(yè)面、字體、圖片等。
  4. 文件尾(trailer):
    包括文件大小、根對(duì)象的編號(hào)等信息。startxref 指向交叉引用表的位置,文件結(jié)束符 “%%EOF”。

PDF文件讀取過(guò)程分析

PDF閱讀器讀取渲染顯示PDF文件,有如下過(guò)程。

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析

PDF內(nèi)容詳解

PDF文件頭

PDF文件的開(kāi)頭所包含的幾個(gè)字節(jié),用于標(biāo)識(shí)這個(gè)文件的類(lèi)型和版本。PDF文件頭的格式是:%PDF-1.x,其中x代表版本號(hào)。

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析

上圖是“%PDF-1.0”,說(shuō)明該文件是一個(gè)PDF版本1.0的文檔。

PDF對(duì)象obj

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析

對(duì)象obj是pdf文件的主體內(nèi)容。上面選中的部分是第一個(gè)完整的obj,注意obj開(kāi)頭的偏移地址為21。

1 0 obj << /Length 44 >> stream q 595.80 0 0 842.40 0.00 0.00 cm /Im33 Do Q endstream endobj

對(duì)上圖中所有的obj各個(gè)字段進(jìn)行解釋。

  1. 1 0 obj – 對(duì)象編號(hào)及版本號(hào)
  2. << >> – 對(duì)象屬性字典的開(kāi)始和結(jié)束標(biāo)記
  3. /Length 44 – 圖像數(shù)據(jù)的長(zhǎng)度,單位為字節(jié)
  4. stream – 圖像數(shù)據(jù)流的開(kāi)始標(biāo)記
  5. q – 圖形狀態(tài)保存命令,保存當(dāng)前的圖形狀態(tài),方便后續(xù)恢復(fù)
  6. /Im33 Do – 在當(dāng)前位置插入名稱為”Im33″的圖像資源
  7. Q – 圖形狀態(tài)還原命令,恢復(fù)之前保存的圖形狀態(tài)
  8. endstream – 圖像數(shù)據(jù)流的結(jié)束標(biāo)記
  9. endobj – 對(duì)象定義的結(jié)束標(biāo)記

PDF交叉引用表xref

交叉引用表xref位于文件尾部,所有obj結(jié)束后就是xref。注意xref的偏移地址為7990754??梢运阉鱴ref快速定位交叉引用表的位置。

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析
xref
0 1
0000000000 65535 f
1 1
0000000021 00000 n
2 1
0000000118 00000 n

每個(gè)字段的含義解釋:

  1. xref – 交叉引用表的開(kāi)始標(biāo)記
  2. 0 – 第一個(gè)對(duì)象的編號(hào)
  3. 1 – 對(duì)象的數(shù)量
  4. 0000000000 65535 f – 第一個(gè)對(duì)象的描述,其中:0000000000 – 第一個(gè)對(duì)象在文件中的偏移量65535 – 對(duì)象的生成號(hào),因?yàn)榇颂幨恰眆”,所以表示這個(gè)對(duì)象是一個(gè)自由對(duì)象(free object),即已被刪除的對(duì)象,可以被其他新對(duì)象重復(fù)使用
  5. 1 1 – 第二個(gè)對(duì)象的編號(hào)和數(shù)量
  6. 0000000021 00000 n – 第二個(gè)對(duì)象的描述,其中:0000000021 – 第二個(gè)對(duì)象在文件中的偏移量00000 – 對(duì)象的生成號(hào)n – 表示這個(gè)對(duì)象是一個(gè)普通對(duì)象(normal object),即當(dāng)前被使用的對(duì)象
  7. 后面的依次同上

所以上面的0 1表示的是刪除對(duì)象,1 1實(shí)際對(duì)應(yīng)PDF中的第一個(gè)obj,其偏移地址就是對(duì)應(yīng)的之前第一個(gè)obj的地址,為21。這樣pdf解析工具就能正常尋址找到文件中所有obj的對(duì)象了。

PDF文件尾trailer

PDF文件尾trailer位于文件的末尾,在交叉引用表xref的后面。包含了PDF文件中的對(duì)象位置信息和文件總體描述信息,是解析和渲染PDF文件的必要信息。

數(shù)據(jù)恢復(fù)(七)-PDF文件結(jié)構(gòu)分析

這里startxref就是對(duì)應(yīng)上面的7990754。

trailer << /Root 74 0 R /Size 84 >> startxref 7990754 %%EOF

對(duì)trailer每個(gè)字段含義的解釋:

  1. trailer – 文件總體描述信息的開(kāi)始標(biāo)記
  2. << >> – 文件總體描述信息的屬性字典,其中包含:/Root 74 0 R – 根對(duì)象的引用,其中74 0 R表示該對(duì)象在文件中的編號(hào)為74,第二個(gè)數(shù)字0表示該對(duì)象在交叉引用表中的位置/Size 84 – PDF文件中的對(duì)象數(shù)量,包括自由對(duì)象和普通對(duì)象
  3. startxref – 交叉引用表的起始位置標(biāo)記
  4. 7990754 – 交叉引用表在文件中的偏移量,即從文件的開(kāi)頭到交叉引用表的位置的字節(jié)數(shù)
  5. %%EOF – 文件結(jié)束標(biāo)記,表示PDF文件正式結(jié)束

總結(jié)

從分析結(jié)果來(lái)看,PDF是非常結(jié)構(gòu)化的文件。搞清楚了PDF文件對(duì)象的尋址原理甚至可以自己寫(xiě)一個(gè)PDF解析工具,這樣對(duì)任何文件系統(tǒng)的結(jié)構(gòu)原理理解也會(huì)更加深刻。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多