查看so庫的編譯選項
『壹』 請教一下,SO文件如何反編譯最好是WIN環境下搭建。謝謝。
謝謝。。。以前玩過CD版的,我去找找。。。另外SO庫和DLL庫的逆向近似嗎?貌似我查了下,我關注的這個軟體轉碼演算法網上還木有。。。是不是也有殼的說法,或者密鑰?但離線閱讀能實現的功能應該可以逆向,而且是不分文本、通用型轉碼。
『貳』 請問我有一個.so文件,如何在linux下編程使用呢
-lxx
xx是你的.so文件名
其實使用方法和你使用數學庫函數是一樣的,源代碼中添加
#include <math.h>,編譯的時候,加上-lm參數。
註:linux下的.so文件為共享庫,相當於windows下的dll文件。
(2)查看so庫的編譯選項擴展閱讀:
linux下編寫調用so文件實例
.so是Linux(Unix)下的動態鏈接庫. 和.dll類似.
比如:
文件有: a.c, b.c, c.c
gcc -c a.c
gcc -c b.c
gcc -c c.c
gcc -shared libXXX.so a.o b.o c.o
要使用的話也很簡單. 比如編譯d.c, 使用到libXXX.so中的函數, libXXX.so地址是MYPATH
gcc d.c -o d -LMYPATH -lXXX
注意不是-llibXXX
test.c文件和一個test.h,這兩個文件要生成libsotest.so文件。然後我還有一個testso.c文件,在這個文件裡面調用libsotest.so中的函數。
編寫的過程中,首先是編譯so文件,我沒有編寫makefile文件,而是參考的2裡面說的直接寫的gcc命令。
因為so文件裡面沒有main函數,所以是不可執行的,所以編譯的時候要加上-c,只生成目標文件。
『叄』 有個.so(unix 動態鏈接庫)文件,有辦法可以查看它都提供什麼樣的函數或介面可以調用嗎謝謝。
nm 命令 可以看到符號表(不是所有庫都包含這些信息,因為代碼在執行的時候只用地址,這些信息是調試用的,正式的版權軟體不一定包含這些),其中可以看到函數名,和變數名。但是具體傳入參數的類型和其他信息,其實在標准C和C++在二進制庫文件中是不包括這些信息的,進棧和出棧是在編譯階段決定的。
gdb 調試so所屬應用程序的執行,看它的調用函數的傳入和傳出。
反編譯可以獲得一些信息,不過過程復雜,因為你要觀察匯編代碼和地址之間的跳轉。如果你只是開發程序的話,獲得完善的信息,你只能查看手冊。
但是如果你是想用某個版權軟體的某個so的功能的話只能反編譯分析代碼了。如果你具備反編譯技能的話,應該不會問這個問題了。所以別傷腦筋了。你火候到了自然都有辦法了。
如果藉此以營利是違法的。
『肆』 linux下,有幾個.so。如何將這幾個動態庫編譯成一個動態庫
在 Linux 環境下,可以使用 `g++` 命令在程序編譯時鏈接多個動態庫。鏈接時,可以通過 `-l` 選項指定需要鏈接的庫名(不包含 `lib` 前綴和 `.so` 擴展),同時使用 `-L` 選項指定動態庫所在的目錄,以便 `g++` 在鏈接時能夠找到這些庫。因此,一條典型的鏈接多個動態庫的 `g++` 命令可能如下所示:
```bash
g++ -l庫名1 -l庫名2 -L庫目錄1 -L庫目錄2 源文件.cpp -o 目標文件
```
在這個過程中,並不需要將多個動態庫編譯成一個單一的動態庫。`g++` 會在鏈接階段將程序所需的各個動態庫合並到一起,形成最終的可執行文件。因此,您無需將多個動態庫編譯成一個動態庫,`g++` 已經支持同時鏈接多個動態庫的功能。