0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用于查看目標(biāo)文件或可執(zhí)行文件的組成信息的命令:objdump命令

Linux愛(ài)好者 ? 來(lái)源:Linux愛(ài)好者 ? 作者:戀貓大鯉魚(yú) ? 2021-02-09 18:17 ? 次閱讀

1.功能簡(jiǎn)介

objdump 命令是 GNU Binutils 二進(jìn)制工具集的一員,用于查看目標(biāo)文件或可執(zhí)行文件的組成信息,以可讀的形式打印二進(jìn)制文件的內(nèi)容。

2.命令格式

objdump[OPTIONS]OBJFILES

3.選項(xiàng)說(shuō)明

-a,--archive-headers
顯示檔案頭信息,展示檔案每一個(gè)成員的文件格式。效果等同于命令 ar -tv
-b,--target=BFDNAME
指定目標(biāo)碼格式。這不是必須的,objdump 能自動(dòng)識(shí)別許多格式,比如 objdump -b oasys -m vax -h fu.o 顯示 fu.o 的頭部摘要信息,明確指出該文件是 Vax 系統(tǒng)下用 Oasys 編譯器生成的目標(biāo)文件。objdump -i 將給出這里可以指定的目標(biāo)碼格式列表
-C,--demangle[=STYLE]
目標(biāo)文件中的符號(hào)解碼成用戶級(jí)名稱。比如移除符號(hào)修飾時(shí)在變量與函數(shù)名前添加的下劃線等。
-d,--disassemble
反匯編目標(biāo)文件,將機(jī)器指令反匯編成匯編代碼
-D,--disassemble-all
與-d類(lèi)似,但反匯編所有段(section)
-z,--disassemble-zeroes
一般反匯編輸出將省略零塊,該選項(xiàng)使得這些零塊也被反匯編
-EB,-EL,--endian={big|little}
指定目標(biāo)文件的字節(jié)序,在目標(biāo)文件沒(méi)描述字節(jié)序時(shí)很有用,例如 S-records。這個(gè)選項(xiàng)只影響反匯編
-f,--file-headers
顯示每一個(gè)目標(biāo)文件的頭信息
-F,--file-offsets
反匯編時(shí),打印每一個(gè)符號(hào)的偏移地址
--file-start-context
顯示源碼/匯編代碼(假設(shè)為-S)時(shí),將上下文擴(kuò)展到文件的開(kāi)頭
-g,--debugging
顯示調(diào)試信息。企圖解析保存在文件中的調(diào)試信息并以 C 語(yǔ)言的語(yǔ)法顯示出來(lái)。僅僅支持某些類(lèi)型的調(diào)試信息。有些其他的格式被readelf -w支持
-e,--debugging-tags
類(lèi)似-g選項(xiàng),但是生成的信息是和ctags工具相兼容的格式
-h,--section-headers,--headers
顯示目標(biāo)文件各個(gè)section的頭部摘要信息
-i,--info
顯示對(duì)于-b或者-m選項(xiàng)可用的架構(gòu)和目標(biāo)格式列表
-j,--section=NAME
僅顯示指定名稱的section的信息
-l,--line-numbers
用文件名和行號(hào)標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用
-S,--source
反匯編時(shí)盡可能使用源代碼表示。隱含了-d參數(shù)
-m,--architecture=MACHINE
指定反匯編目標(biāo)文件時(shí)使用的架構(gòu),當(dāng)待反匯編文件本身沒(méi)描述架構(gòu)信息的時(shí)候(比如S-records),這個(gè)選項(xiàng)很有用。可以用-i選項(xiàng)列出這里能夠指定的架構(gòu)
-M,--disassembler-options=OPTIONS
給反匯編程序傳遞參數(shù),可以指定多個(gè),使用逗號(hào)分隔
-p,--private-headers
打印目標(biāo)文件格式的特定信息。打印的信息取決于目標(biāo)文件格式,對(duì)于某些目標(biāo)文件格式,不打印任何附加信息。
-P,--private=OPTIONS
打印目標(biāo)文件格式的特定信息。OPTIONS 是一個(gè)逗號(hào)分隔的列表。例如對(duì)于XCOFF,可用的選項(xiàng)有 header, aout, sections, syms, relocs, lineno, loader, except, typchk, traceback and toc
-r,--reloc
顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯編后的格式顯示出來(lái)
-R,--dynamic-reloc
顯示文件的動(dòng)態(tài)重定位入口,僅僅對(duì)于動(dòng)態(tài)目標(biāo)文件意義,比如某些共享庫(kù)
-s,--full-contents
顯示section的完整內(nèi)容。默認(rèn)所有的非空section都會(huì)被顯示
-W[lLiaprmfFsoRt],--dwarf=[rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]
顯示文件中調(diào)試段的內(nèi)容,如果存在的話
-G,--stabs
顯示請(qǐng)求的任何 section 的全部?jī)?nèi)容。顯示段 .stab、.stab.index 和 .stab.excl 的內(nèi)容
-t,--syms
顯示文件的符號(hào)表入口。類(lèi)似于nm -s提供的信息
-T,--dynamic-syms
顯示文件的動(dòng)態(tài)符號(hào)表入口,僅僅對(duì)動(dòng)態(tài)目標(biāo)文件意義,比如某些共享庫(kù)。它顯示的信息類(lèi)似于 nm -D,--dynamic 顯示的信息
-x,--all-headers
顯示所可用的頭信息,包括符號(hào)表、重定位入口。-x 等價(jià)于-a -f -h -p -r -t 同時(shí)指定
-w,--wide
為具有超過(guò)80列的輸出設(shè)備格式化某些行。也不要在顯示符號(hào)名稱時(shí)截?cái)喾?hào)名稱
--start-address=ADDRESS
從指定地址開(kāi)始顯示數(shù)據(jù),該選項(xiàng)影響-d、-r和-s選項(xiàng)的輸出
--stop-address=ADDRESS
顯示數(shù)據(jù)直到指定地址為止,該項(xiàng)影響-d、-r和-s選項(xiàng)的輸出
--prefix-addresses
反匯編的時(shí)候,顯示每一行的完整地址。這是一種比較老的反匯編格式
--no-show-raw-insn
反匯編時(shí),不顯示匯編指令的機(jī)器碼。當(dāng)使用--prefix-addresses時(shí),這是缺省選項(xiàng)
--adjust-vma=OFFSET
當(dāng)解析信息時(shí),首先給所有的段添加偏移值offset。當(dāng)段地址與符號(hào)表不符時(shí),這個(gè)選項(xiàng)很有用。比如將段放置到特殊地址,因?yàn)槟硞€(gè)格式無(wú)法表示段地址,比如 a.out
--special-syms
顯示特殊符號(hào)與用戶不關(guān)心的符號(hào)
--prefix=PREFIX
當(dāng)使用-S時(shí),指定前綴添加到絕對(duì)路徑中
--prefix-strip=LEVEL
指定剝離絕對(duì)路徑中多少個(gè)前綴目錄名。此選項(xiàng)只有在使用了選項(xiàng)--prefix=PREFIX 才有效
--insn-width=WIDTH
指定反匯編后的指令輸出的行寬,單位字節(jié)
-V,--version
版本信息
-H,--help
幫助信息

4.常用示例

首先給出后面大部分測(cè)試所基于的源代碼以及編譯指令。涉及兩個(gè) C++ 源文件。
objdump.cpp:

main.cpp:

#include
usingnamespacestd;

voidprint();

intmain()
{
print();
}

使用-g選項(xiàng)加入調(diào)試信息,分別編譯生成目標(biāo)文件objdump.o與main.o。

g++-c-gobjdump.cpp-oobjdump.o
g++-c-gmain.cpp-omain.o

然后通過(guò)ar命令將兩個(gè)目標(biāo)文件打包成靜態(tài)庫(kù)libobjdump.a。

arcrvlibobjdump.amain.oobjdump.o

(1)查看檔案包含的目標(biāo)文件列表。

[root@TENCENT64~]#objdump-alibobjdump.a
Inarchivelibobjdump.a:

main.o:fileformatelf64-x86-64
rw-r--r--0/018696Mar820:252019main.o

objdump.o:fileformatelf64-x86-64
rw-r--r--0/021352Mar820:252019objdump.o

使用命令ar -tv也可以列出檔案中包含的目標(biāo)文件。

[root@TENCENT64~]#ar-tvlibobjdump.a
rw-r--r--0/018696Mar820:252019main.o
rw-r--r--0/021352Mar820:252019objdump.o

(2)顯示目標(biāo)文件objdump.o的代碼段(.text)內(nèi)容。

[root@TENCENT64~]#objdump--section=.text-sobjdump.o
objdump.o:fileformatelf64-x86-64

Contentsofsection.text:
0000554889e5be00000000bf00000000e800UH..............
0010000000be000000004889c7e800000000........H.......
00205dc3554889e54883ec10897dfc8975f8].UH..H....}..u.
0030837dfc017527817df8ffff0000751ebf.}..u'.}.....u..
004000000000e800000000ba00000000be00................
0050000000bf00000000e800000000c9c355...............U
00604889e5beffff0000bf01000000e8b0ffH...............
0070ffff5dc3..].

注意,不能單獨(dú)使用-j或者–section選項(xiàng),一定要加上-s選項(xiàng)。

(3)反匯編objdump.o中的text段內(nèi)容,并盡可能用源代碼形式表示。

[root@TENCENT64~]#objdump--section=.text-Sobjdump.o
objdump.o:fileformatelf64-x86-64

Disassemblyofsection.text:

0000000000000000<_Z5printv>:
#include

voidprint()
{
0:55push%rbp
1:4889e5mov%rsp,%rbp
std::cout<<"objdump"<$0x0,%esi
9:bf00000000mov$0x0,%edi
e:e800000000callq13<_Z5printv+0x13>
13:be00000000mov$0x0,%esi
18:4889c7mov%rax,%rdi
1b:e800000000callq20<_Z5printv+0x20>
}
20:5dpop%rbp
21:c3retq

0000000000000022<_Z41__static_initialization_and_destruction_0ii>:
22:55push%rbp
23:4889e5mov%rsp,%rbp
26:4883ec10sub$0x10,%rsp
2a:897dfcmov%edi,-0x4(%rbp)
2d:8975f8mov%esi,-0x8(%rbp)
30:837dfc01cmpl$0x1,-0x4(%rbp)
34:7527jne5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
36:817df8ffff0000cmpl$0xffff,-0x8(%rbp)
3d:751ejne5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
externwostreamwclog;///Linkedtostandarderror(buffered)
#endif
//@}

//Forconstructionoffilebuffersforcout,cin,cerr,cloget.al.
staticios_base::Init__ioinit;
3f:bf00000000mov$0x0,%edi
44:e800000000callq49<_Z41__static_initialization_and_destruction_0ii+0x27>
49:ba00000000mov$0x0,%edx
4e:be00000000mov$0x0,%esi
53:bf00000000mov$0x0,%edi
58:e800000000callq5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
5d:c9leaveq
5e:c3retq

000000000000005f<_GLOBAL__sub_I__Z5printv>:
5f:55push%rbp
60:4889e5mov%rsp,%rbp
63:beffff0000mov$0xffff,%esi
68:bf01000000mov$0x1,%edi
6d:e8b0ffffffcallq22<_Z41__static_initialization_and_destruction_0ii>
72:5dpop%rbp
73:c3retq

(3)顯示目標(biāo)文件的符號(hào)表入口。

[root@TENCENT64~]#objdump-tobjdump.o
objdump.o:fileformatelf64-x86-64

SYMBOLTABLE:
0000000000000000ldf*ABS*0000000000000000objdump.cpp
0000000000000000ld.text0000000000000000.text
0000000000000000ld.data0000000000000000.data
0000000000000000ld.bss0000000000000000.bss
0000000000000000lO.bss0000000000000001_ZStL8__ioinit
0000000000000000ld.rodata0000000000000000.rodata
0000000000000022lF.text000000000000003d_Z41__static_initialization_and_destruction_0ii
000000000000005flF.text0000000000000015_GLOBAL__sub_I__Z5printv
0000000000000000ld.init_array0000000000000000.init_array
0000000000000000ld.debug_info0000000000000000.debug_info
0000000000000000ld.debug_abbrev0000000000000000.debug_abbrev
0000000000000000ld.debug_aranges0000000000000000.debug_aranges
0000000000000000ld.debug_line0000000000000000.debug_line
0000000000000000ld.debug_str0000000000000000.debug_str
0000000000000000ld.note.GNU-stack0000000000000000.note.GNU-stack
0000000000000000ld.eh_frame0000000000000000.eh_frame
0000000000000000ld.comment0000000000000000.comment
0000000000000000gF.text0000000000000022_Z5printv
0000000000000000*UND*0000000000000000_ZSt4cout
0000000000000000*UND*0000000000000000_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
0000000000000000*UND*0000000000000000_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000*UND*0000000000000000_ZNSolsEPFRSoS_E
0000000000000000*UND*0000000000000000_ZNSt8ios_base4InitC1Ev
0000000000000000*UND*0000000000000000.hidden__dso_handle
0000000000000000*UND*0000000000000000_ZNSt8ios_base4InitD1Ev
0000000000000000*UND*0000000000000000__cxa_atexit

這里,輸出的信息類(lèi)似nm -s命令的輸出,相比較之下,nm命令的輸出如下:

[root@TENCENT64~]#nm-sobjdump.o
U__cxa_atexit
U__dso_handle
000000000000005ft_GLOBAL__sub_I__Z5printv
0000000000000022t_Z41__static_initialization_and_destruction_0ii
0000000000000000T_Z5printv
U_ZNSolsEPFRSoS_E
U_ZNSt8ios_base4InitC1Ev
U_ZNSt8ios_base4InitD1Ev
U_ZSt4cout
U_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000b_ZStL8__ioinit
U_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc

(4)顯示目標(biāo)文件各個(gè)段的頭部摘要信息。

[root@TENCENT64~]#objdump-hobjdump.o
objdump.o:fileformatelf64-x86-64

Sections:
IdxNameSizeVMALMAFileoffAlgn
0.text0000007400000000000000000000000000000000000000402**2
CONTENTS,ALLOC,LOAD,RELOC,READONLY,CODE
1.data0000000000000000000000000000000000000000000000b42**2
CONTENTS,ALLOC,LOAD,DATA
2.bss0000000100000000000000000000000000000000000000b42**2
ALLOC
3.rodata0000000800000000000000000000000000000000000000b42**0
CONTENTS,ALLOC,LOAD,READONLY,DATA
4.init_array0000000800000000000000000000000000000000000000c02**3
CONTENTS,ALLOC,LOAD,RELOC,DATA
5.debug_info000014f900000000000000000000000000000000000000c82**0
CONTENTS,RELOC,READONLY,DEBUGGING
6.debug_abbrev0000039f00000000000000000000000000000000000015c12**0
CONTENTS,READONLY,DEBUGGING
7.debug_aranges0000003000000000000000000000000000000000000019602**0
CONTENTS,RELOC,READONLY,DEBUGGING
8.debug_line0000024400000000000000000000000000000000000019902**0
CONTENTS,RELOC,READONLY,DEBUGGING
9.debug_str00000e4c0000000000000000000000000000000000001bd42**0
CONTENTS,READONLY,DEBUGGING
10.comment0000002d0000000000000000000000000000000000002a202**0
CONTENTS,READONLY
11.note.GNU-stack000000000000000000000000000000000000000000002a4d2**0
CONTENTS,READONLY
12.eh_frame000000780000000000000000000000000000000000002a502**3
CONTENTS,ALLOC,LOAD,RELOC,READONLY,DATA

參考文獻(xiàn)

[1] objdump manual
[2] objdump命令.Linux命令大全
[3] GNU Binutils

責(zé)任編輯:xj

原文標(biāo)題:每天一個(gè) Linux 命令(106):objdump 命令

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11312

    瀏覽量

    209714
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    685

    瀏覽量

    22044

原文標(biāo)題:每天一個(gè) Linux 命令(106):objdump 命令

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    查看命令相關(guān)的所有幫助

    是never(從不)或者auto(自動(dòng))-d顯示目錄信息,而不是目錄下的文件-h人性化顯示-i顯示文件的i節(jié)點(diǎn)-l長(zhǎng)格式顯示 演示:[root@hadoop100 ~]# ls -l總用量
    的頭像 發(fā)表于 01-03 09:37 ?45次閱讀
    <b class='flag-5'>查看</b>和<b class='flag-5'>命令</b>相關(guān)的所有幫助

    labview打包可執(zhí)行文件后安裝出錯(cuò)

    在 labview 寫(xiě)程序時(shí)使用到了ni-imaqdx模塊,最終將其打包為可執(zhí)行文件和安裝包后,在其它電腦安裝后會(huì)提示ni-imaqdx軟件未激活,請(qǐng)問(wèn)這是安裝環(huán)境沒(méi)有配置好嗎?
    發(fā)表于 12-17 19:23

    Linux lsof命令的基本用法

    在 linux 系統(tǒng)中,一切皆文件。通過(guò)文件不僅僅可以訪問(wèn)常規(guī)數(shù)據(jù),還可以訪問(wèn)網(wǎng)絡(luò)連接和硬件。所以 lsof 命令不僅可以查看進(jìn)程打開(kāi)的文件
    的頭像 發(fā)表于 10-23 11:52 ?297次閱讀
    Linux lsof<b class='flag-5'>命令</b>的基本用法

    C語(yǔ)言生成可執(zhí)行二進(jìn)制文件的具體過(guò)程

    C語(yǔ)言源碼到生成可執(zhí)行文件的過(guò)程通常包括預(yù)處理(Preprocessing)、編譯(Compilation)、匯編(Assembly)、鏈接(Linking)等多個(gè)步驟,每個(gè)步驟都有其特定的任務(wù)
    的頭像 發(fā)表于 10-21 14:30 ?569次閱讀
    C語(yǔ)言生成<b class='flag-5'>可執(zhí)行</b>二進(jìn)制<b class='flag-5'>文件</b>的具體過(guò)程

    Jtti:如何查看yum命令的錯(cuò)誤日志來(lái)診斷問(wèn)題?

    history 命令來(lái)查看Yum事務(wù)的歷史記錄,這包括了事務(wù)ID、執(zhí)行操作的用戶、操作發(fā)生的日期和時(shí)間、實(shí)際操作以及任何錯(cuò)誤的附加信息。例如,要
    的頭像 發(fā)表于 10-14 15:51 ?248次閱讀

    labview怎么生成可執(zhí)行文件

    生成可執(zhí)行文件(EXE)是LabVIEW程序開(kāi)發(fā)中的一個(gè)重要步驟,它允許用戶將LabVIEW項(xiàng)目打包成一個(gè)獨(dú)立的應(yīng)用程序,便于在沒(méi)有安裝LabVIEW的計(jì)算機(jī)上運(yùn)行。 1. 準(zhǔn)備工作 在開(kāi)始生成
    的頭像 發(fā)表于 09-04 17:07 ?1072次閱讀

    labview生成可執(zhí)行程序后vi都在同一路徑下嗎

    在LabVIEW中,當(dāng)您生成可執(zhí)行程序(exe文件)后,VI(虛擬儀器)并不直接以文件的形式存在于可執(zhí)行文件的同一物理路徑下。實(shí)際上,LabVIEW的
    的頭像 發(fā)表于 09-04 17:06 ?638次閱讀

    嵌入式學(xué)習(xí)-常見(jiàn)的shell命令文件操作相關(guān)命令

    、whereis查找文件命令:whereis功能:用于定位可執(zhí)行文件、源代碼文件、幫助文件
    發(fā)表于 08-20 09:40

    常見(jiàn)的shell命令文件操作相關(guān)命令

    用于定位可執(zhí)行文件、源代碼文件、幫助文件文件系統(tǒng)中的位置參數(shù):whereis [選項(xiàng)] 文件
    發(fā)表于 08-19 10:01

    國(guó)產(chǎn)芯上運(yùn)行TinyMaxi輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理庫(kù)-米爾基于芯馳D9國(guó)產(chǎn)商顯板

    cmake生成構(gòu)建系統(tǒng) 使用make構(gòu)建可執(zhí)行文件然后運(yùn)行 可以看到輸出信息 MNIST 示例默認(rèn)未使用任何指令加速,運(yùn)行了一張 28×28 的手寫(xiě)數(shù)字模擬圖像,共消耗了 0.114 毫秒 MBNET示例
    發(fā)表于 08-09 18:26

    430單片機(jī)代碼debug后無(wú)法生成可執(zhí)行文件

    軟件是用許可證注冊(cè)過(guò)的,代碼是正確的,但是點(diǎn)完右上角那個(gè)build鍵后,消息框說(shuō)生成不了可執(zhí)行文件,如圖
    發(fā)表于 07-15 09:28

    快來(lái)用Makefile管理工程,提高工作效率!

    文件中包含了一系列的規(guī)則來(lái)指導(dǎo)如何產(chǎn)生目標(biāo)文件,這些規(guī)則包含目標(biāo)、依賴和命令目標(biāo)(Target
    的頭像 發(fā)表于 05-18 08:10 ?348次閱讀
    快來(lái)用Makefile管理工程,提高工作效率!

    用keil mdk編譯出的可執(zhí)行文件.axf,如何設(shè)置keil才能讓.axf包含.debug.str?

    用keil mdk編譯出的可執(zhí)行文件.axf,用readelf -S查看.axf文件信息,發(fā)現(xiàn)沒(méi)有.debug.str,請(qǐng)問(wèn)如何設(shè)置keil才能讓.axf包含.debug.str C
    發(fā)表于 04-01 07:28

    在buildroot創(chuàng)建帶qt的根文件系統(tǒng),宿主機(jī)的qt需要在什么位置?

    /QtEmbedded-4.8.5。然后將后者復(fù)制到目標(biāo)板的相同目錄里。這樣宿主機(jī)編譯完后,將生成的可執(zhí)行文件放至目標(biāo)板內(nèi)就可以執(zhí)行。 現(xiàn)在,我用buidroot生成了個(gè)帶qt5的根
    發(fā)表于 01-17 08:27

    《Linux常用命令自學(xué)手冊(cè)》+Linux簡(jiǎn)單指令筆記

    或目錄的名字。 - 用法:mv [選項(xiàng)] [源文件/目錄](méi) [目標(biāo)文件/目錄](méi) cat:查看文件內(nèi)容。 - 用法:cat [
    發(fā)表于 01-05 08:44