查看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++` 已经支持同时链接多个动态库的功能。