首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows 靜態庫分析:使用 lib.exe 列出 LIBC.LIB 包含的 OBJ 模塊

     編輯:關於C語言

背景:.lib 文件本質

靜態庫 = 多個 .obj 目標文件的歸檔包(類比 Linux .a)。鏈接器按需提取其中的 OBJ 解決符號引用。

工具:Microsoft Library Manager (lib.exe)

位置:VC/bin/lib.exe 或 VC/Tools/MSVC/x.x.x/bin/Hostx64/x64/lib.exe

常用選項

實戰:分析 LIBC.LIB


D:\Program Files\Microsoft Visual Studio\VC98\Lib> lib /LIST libc.lib > libc.log

輸出 600+ 行,部分節選:


Microsoft (R) Library Manager Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

..\build\intel\st_obj\util.obj
..\build\intel\st_obj\matherr.obj
..\build\intel\st_obj\ldexp.obj
..\build\intel\st_obj\ieeemisc.obj
..\build\intel\st_obj\frexp.obj
..\build\intel\st_obj\fpexcept.obj
..\build\intel\st_obj\bessel.obj
..\build\intel\st_obj\xmmi2_fp_emul.obj
..\build\intel\st_obj\xmmi_fp_emul.obj
..\build\intel\st_obj\sqrt.obj
..\build\intel\st_obj\pow.obj
..\build\intel\st_obj\log10.obj
..\build\intel\st_obj\log.obj
..\build\intel\st_obj\tan.obj
..\build\intel\st_obj\cos.obj
..\build\intel\st_obj\sin.obj
..\build\intel\st_obj\atan.obj
..\build\intel\st_obj\acos.obj
..\build\intel\st_obj\asin.obj
..\build\intel\st_obj\testfdiv.obj
..\build\intel\st_obj\powhlp.obj
..\build\intel\st_obj\modf.obj
..\build\intel\st_obj\ieee87.obj
...

分類觀察

  • 浮點模擬/異常:fpexcept、ieee87、xmmi_fp_emul (SSE)
  • 數學函數:sin/cos/tan、asin/acos/atan、log/exp/pow/sqrt、hypot
  • 運行時支持:matherr、fpinit、cvt、ftol (float→long)
  • 時間/日期:time/ctime/gmtime/localtime/strftime/mktime
  • 字符串/多字節:cmap* (字符映射)、mbscpy/mbslen、str*
  • 內存/堆:malloc/free/heap*(可能在單獨庫中)

進階用法

1. 提取單個 OBJ 研究符號表


lib /EXTRACT:sin.obj libc.lib
dumpbin /SYMBOLS sin.obj

2. 重建精簡庫(僅保留需要的 OBJ)


lib /OUT:my_libc.lib /REMOVE:unwanted1.obj /REMOVE:unwanted2.obj libc.lib

3. 查看符號導出


lib /LIST libc.lib | findstr "sin"
dumpbin /EXPORTS libc.lib

Linux 對比:ar 與 nm

選項功能
/LIST[:file]列出庫中所有 OBJ 模塊(可重定向到文件)
/EXTRACT:member提取指定 OBJ 到文件
/REMOVE:member從庫中刪除 OBJ
/OUT:file指定輸出庫文件名(配合增刪改)
操作Windows (lib.exe)Linux (ar/nm)
列出模塊lib /LIST foo.libar -t foo.a
提取模塊lib /EXTRACT:bar.obj foo.libar -x foo.a bar.o
查看符號dumpbin /SYMBOLS bar.objnm bar.o
創建庫lib /OUT:foo.lib a.obj b.objar rcs foo.a a.o b.o

總結

lib.exe /LIST 是分析靜態庫組成的**標準方法**。理解庫內部 OBJ 結構,有助於:排查鏈接錯誤(多重定義/未解析符號)、優化鏈接速度(移除無用 OBJ)、安全審計(檢查是否包含調試/測試代碼)、跨平台移植(對應 .a 文件結構)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved