精华内容
下载资源
问答
  • 1,查看SO文件链接的库 ldd a.so 2,查看so文件的函数列表 nm -D a.so 3,查看so文件的导出函数及源文件等信息 objdump -tT a.so 4,查看所有可打印的字符串 strings a.so strings作用: 找出文件内容中的可打印...

    1,查看SO文件链接的库

    ldd a.so

    2,查看so文件的函数列表

    nm -D a.so

    3,查看so文件的导出函数及源文件等信息

    objdump -tT a.so

    4,查看所有可打印的字符串

    strings a.so

    strings作用:

    找出文件内容中的可打印字符串。所谓可打印字符串的涵义是,它的组成部分都是可打印字符,并且以null或者newline结尾。对于普通文本文件来说,strings没有任何意义,因为文本文件中的任何内容实际都是可打印的字符串。strings最常用的场合就是列出动态库或者可执行程序等二进制文件中出现的字符串,结合grep即可实现查找。

     

     

    展开全文
  • (1)开源的class_loader生成so文件,作为插件生成、加载等的基础; (2)插件基类,包括标签生成器基类、传感器数据采集基类,依赖class_loader,目的是为具体的插件提供头文件; (3)标签生成器插件,用户自己...

    这一段一直在整插件管理框架的事情,整个框架分成几层:

    (1)开源的class_loader生成so文件,作为插件生成、加载等的基础;

    (2)插件基类,包括标签生成器基类、传感器数据采集基类,依赖class_loader,目的是为具体的插件提供头文件;

    (3)标签生成器插件,用户自己实现genLabel函数,通过用户逻辑来控制输出的标签的内容、长度等,这个插件依赖于class_loader和插件基类;

    (4)传感器数据采集插件,也是以class_loader为基础,同时依赖标签生成器和插件基类;

    (5)插件管理框架,将所有的插件管理起来,实际上直接依赖于class_loader和插件基类。

    现在按照上述层次关系,依次编译安装。但在使用过程中,例如对于插件管理框架,用户想着我只是用你的插件管理框架,我引入该框架的.so文件即可,至于你依赖谁,我并不关心,我也不应该知道,我更不应该引入这些so文件。这是因为在默认情况下,库依赖项是传递的。当目标A 链接到目标B 时,链接到A 的库也会出现B 的链接线上。

    上述几个工程都在同一个目录下,属于平级关系,如下图所示。

    我们在编译完插件管理框架后,使用ldd查看链接关系,发现所有库都是链接上的。

    对应的cmakelists文件如下:

    cmake_minimum_required(VERSION 3.4.2)
    
    project(pluginManager CXX)
    
    # Default to C++14
    if(NOT CMAKE_CXX_STANDARD)
      set(CMAKE_CXX_STANDARD 14)
    endif()
    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic -pthread -lboost_filesystem)
    endif()
    
    include(../micros.cmake)
    set(LINK_DIR ./lib ) # can not be obsolute path
    set(CONSOLE_DIR /lib/x86_64-linux-gnu/)
    set(POCO_DIR /usr/lib/x86_64-linux-gnu/)
    set(CLASS_LOADER_LIB /opt/micros/1.0.1/third-party/class_loader/lib)
    message("aaaaaaaaaa" ${CMAKE_INSTALL_PREFIX})
    set(${PROJECT_NAME}_SRCS src/pluginManager.cpp)
    set(${PROJECT_NAME}_HDRS include/micros_pluginmanager/pluginManager.h)
    
    include_directories( ./include /usr/include)
    
    include_directories(/opt/micros/1.0.1/include)
    include_directories(${CMAKE_INSTALL_PREFIX}/third-party/class_loader/include)
    link_directories(${CMAKE_INSTALL_PREFIX}/lib 
    #${CMAKE_INSTALL_PREFIX}/third-party/class_loader/lib
    #${CLASS_LOADER_LIB}
     ${CMAKE_TMP_OUTPUT_SO_PATH}
     )
    SET(LIBRARY_OUTPUT_PATH ${CMAKE_TMP_OUTPUT_SO_PATH})
    
    link_directories(${LINK_DIR}
                     ${CONSOLE_DIR} 
                     ${POCO_DIR} 
                    /opt/micros/1.0.1/lib/plugins
                     ${CLASS_LOADER_LIB})
    
    #插件基类对应的so文件
    add_library(label_sensor.0.1.0 SHARED IMPORTED)
    set_property(TARGET label_sensor.0.1.0 PROPERTY IMPORTED_LOCATION "/opt/micros/1.0.1/lib/plugins/liblabel_sensor.0.1.0.so")
    #class_loader对应的so文件
    add_library(libmicros_scene_classloader.0.1.0 SHARED IMPORTED)
    set_property(TARGET libmicros_scene_classloader.0.1.0 PROPERTY IMPORTED_LOCATION "/opt/micros/1.0.1/third-party/class_loader/lib/libmicros_scene_classloader.0.1.0.so")
    
    
    add_library(micros_scene_pluginmanager.0.1.0 SHARED ${${PROJECT_NAME}_SRCS} ${${PROJECT_NAME}_HDRS})
    
    target_link_libraries(micros_scene_pluginmanager.0.1.0  optimized
      label_sensor.0.1.0
      micros_scene_classloader.0.1.0
      
    ) 
    #安装so文件到/opt/xxx/lib/目录下
    install(TARGETS micros_scene_pluginmanager.0.1.0 LIBRARY DESTINATION lib/)
    install(DIRECTORY include/  DESTINATION include/) 

    当我们安装后,也就是执行sudo make install之后,发现插件基类库和class_loader库并没有链接上去:

    查了不少原因,尝试了不少方法还是不行。最后,我们思考一下,安装前后的区别是什么?是搜索路径:

    问题

    如果ldd命令没有找到对应的共享库文件和其具体位置?

    可能是两种情况引起的:

    1)共享库没有安装在该系统中;

    2)共享库保存在/etc/ld.so.conf文件列出的搜索路径之外的位置。

    通常情况下,许多开源代码的程序或函数库都会默认将在即安装到/usr/local目录下的相应位置(如:/usr/local/bin 或 /usr/local/lib)以便于系统自身的程序或函数库相区别。而许多linux系统的/ect/ld.so.conf 文件中默认又不包含 /usr/local/lib 。因此出现安装了共享库,但是却无法找到共享库的情况。

    解决办法:
    检查/etc/ld.so.conf文件,如果其中缺少自己编译的被依赖的库的目录,就添加进去;
    注意:在修改了/etc/ld.so.conf 文件或者在系统中安装了新的函数库之后,需要运行命令 ldconfig ,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库so名称的缓存文件 /etc/ld.so.cache 。 因此,在安装新的共享库之后,一定要运行 ldconfig刷新该缓存。

    我们添加插件基类库和class_loader库文件所在路径到/etc/ld.so.conf文件中,如下图所示:

    然后执行sudo /sbin/ldconfig使上述修改生效。

    重新安装插件管理框架库文件,然后ldd查看:

    至此,链接库找不到的问题解决。

    虽然上面的问题解决了,但是给我留下一个更大的疑惑

    疑惑:

    为什么在生成so文件的地方使用ldd查看依赖关系的时候,这些库是能找到的呢?如果说当前路径是默认添加到搜索路径的,我可以理解,但是,pluginmanager.so依赖于label_sensor.so和class_loader.so,但它们俩并不在当前目录下!!!

    1. 测试将make生成so文件移动位置到其他地方,看能否链接成功

    我可以将so文件移动到home/ok/下的任意位置,ldd查看都是能链接上的!

    移动到/home/ok/code/下

    移动到/home/ok/下,该文件仍然属于ok用户。

    将so文件移动到/home/下

    将so文件移动到/var下:

    移动到/opt/micros/1.0.1/lib/下:

    链接没问题,这就意味着make出来的so文件,是记录了它所依赖的其他so文件的路径信息的。

    2. 测试将make install后的so文件移动到其他地方(已经将搜索路径从/etc/ld.so.conf文件中删除)

    我们将它移动到/var目录下:

    我们把安装后的so文件复制到/home/ok/下,然后查看(用户是root):

    我们发现,将安装后的so文件移动到任何一个位置,都无法找到依赖包。

    上述两个文件的区别仅仅是文件的属主,一个是ok,一个是root。

    那么,使用make生成so文件时,依赖库的路径信息到底有么有被放到目标so中呢?如果放进去了,这个好理解,该文件可以随便移动,但是存在弊端:如果你依赖的库文件移动位置了,那就肯定找不到了。我们验证一下,把label_sensor.so从lib/plugins下移动到third-party/class_loader/lib下。(这俩路径目前都不在系统的/etc/ld.so.conf文件中)

    再挪回来:

    我们发现,labe_sensor.so虽然更换了路径,但是仍然能找到,这说明make生成so文件时,依赖库的路径并没有被放到so文件中。

    那么我们思考一下,是不是每一个用户都有一个搜索路径呢?

    如果每个用户都有一个搜索路径,那我把label_sensor.so移动到一个其他位置,是否还有效呢?

    我们将label_sensor.so移动到/opt/micros/下,然后查看:

    我们发现,找不到label_sensor.so,这也就说明(1)so文件中不记录所依赖的其他so文件的路径,只记录so文件名;(2)有可能,每个用户都有一个搜索路径,并且在执行CMakelists.txt对应的make的时候,会把link_directories和add_library添加的依赖路径添加到执行make命令的用户的搜索路径下;(3)有可能每一个so文件里面都包含了一个搜索路径,就是cmakelists.txt中的link_directories和add_library以及target_link_libraries引入的路径,当使用so或者ldd该so文件的时候,会根据so文件里面包含的路径去查找,但这样的话,即使切换用户,应该也能找到!所以这个成立的可能性很小!!!

    3. 使用sudo make来编译so文件

    生成so文件:

    然后安装该文件:

    发现不行,仍然找不到路径。

    我们使用sudo cmake ..; sudo make 再来一遍:

    sudo make install:

    仍然不行,现在我们将sudo cmake ..和sudo make得到的so文件复制到/opt/micros/1.0.1/lib/下:

    发现可以了,这说明是sudo make install破坏了原来的依赖关系!!!

    这说明前面的第二条推论也可能是错误的!!!也就是并不是在cmake ..和make的时候,会将相应的路径添加到用户的搜索路径中?但是如果这样的话,怎么解释make出来的so文件随便移动,其都能找到依赖的so文件,并且其依赖的so文件移动到某些路径下(生成目标so时的link_dictories和add_library以及target_link_libraries指定的路径下)仍然能找到呢?

    是不是生成目标so文件时,附带了对应该so的cmakelists中的link_dictories和add_library以及target_link_libraries的路径呢?也就是前面的推论(3)可能是成立的!但是sudo make install破坏了这种关系。

    我们查看以下make和make install后的文件大小的区别:

    上面的是复制过来的,下面的是安装过来的,大小一致,唯一的区别是make得到的有可执行权限。

    为什么make出来的so文件的库依赖是没有问题的,而make install出来的库文件需要添加依赖库的路径到/etc/ld.so.conf文件中呢?

    限于篇幅问题,我在下一个blog中继续探索!

    有一点需要说明,添加到/etc/ld.so.conf文件中的搜索路径必须是so文件的直接父路径,不能是祖先路径。貌似ldd不会便利某路径下的子目录。

    展开全文
  • 可以得到里面的资源文件,lib里有一些so文件 2.将dex文件转为jar文件 解压后里面还有dex文件。如果应用包很大的话会有两个用来分包,这时候需要将 dex 转为 jar,需要用dex2jar。 下载地址:...

    1.将apk直接改后缀得到 zip

    然后解压后可以直接得到里面的res文件夹,还有lib文件夹。可以得到里面的资源文件,lib里有一些so文件

    2.将dex文件转为jar文件

    解压后里面还有dex文件。如果应用包很大的话会有两个用来分包,这时候需要将 dex 转为 jar,需要用dex2jar
    下载地址:https://sourceforge.net/projects/dex2jar/files/
    注意下载的版本:dex2jar-0.0.9.15。最新的版本dex2jar-2.0我这边使用是有问题的。

    将需要反编译的dex文件放到此文件夹下,并在此目录下运行cmd,输入命令:
    sh d2j-dex2jar.sh [dex文件] 示例:sh d2j-dex2jar.sh classes.dex

    3.查看jar文件内容

    这时候需要用到jd-gui-osx,我下载的是jd-gui-osx-1.6.6
    下载地址:http://java-decompiler.github.io/
    下了之后也是有点坑:不能直接运行会有错误:

    解决方:替代包里的文件universalJavaApplicationStub.sh
    参考:https://blog.csdn.net/twx843571091/article/details/110119638


    遇到的问题

    搞这个可谓一步一个坑,简单的几步,看的windows教程没想到严重水土不服
    1.dex2jar不能使用最新的
    2.jd-gui-osx不能直接运行需要修改
    3.得到的jar可能不是全的代码,执行sh d2j-dex2jar.sh [dex文件]可能会失败了。

    com.googlecode.dex2jar.DexException: while accept method:[Landroidx/activity/OnBackPressedCallback;.addCancellable(Landroidx/activity/Cancellable;)V]
    	at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:694)
    	at com.googlecode.dex2jar.reader.DexFileReader.acceptClass(DexFileReader.java:441)
    	at com.googlecode.dex2jar.reader.DexFileReader.accept(DexFileReader.java:323)
    	at com.googlecode.dex2jar.v3.Dex2jar.doTranslate(Dex2jar.java:85)
    	at com.googlecode.dex2jar.v3.Dex2jar.to(Dex2jar.java:261)
    	at com.googlecode.dex2jar.v3.Dex2jar.to(Dex2jar.java:252)
    	at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:110)
    	at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:174)
    	at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:34)
    Caused by: com.googlecode.dex2jar.DexException: while accept parameter annotation in method:[Landroidx/activity/OnBackPressedCallback;.addCancellable(Landroidx/activity/Cancellable;)V], parameter:[0]
    	at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:663)
    	... 8 more
    Caused by: com.googlecode.dex2jar.DexException: Not support yet.
    	at com.googlecode.dex2jar.reader.Constant.ReadConstant(Constant.java:128)
    	at com.googlecode.dex2jar.reader.DexAnnotationReader.accept(DexAnnotationReader.java:58)
    	at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:660)
    	... 8 more
    
    

    失败后需要处理:https://blog.csdn.net/zhangmiaoping23/article/details/41278035

    最后可能会用到的:

    • apktool下载:https://bitbucket.org/iBotPeaches/apktool/downloads/
    • windows版本查看dex文件内容:https://www.jianshu.com/p/dbe579f6cc84
    展开全文
  • android .so文件调试

    2019-11-19 11:12:53
    android .so文件调试 一、应用程序正常启动的调试: 1、查看当前设备(本人使用android studio自带4.0的设备) adb devices 2、adb shell 3、cd/data/local/tmp 4、查看当前文件夹内容 ls 5、删除指定文件 rm ...

    android .so文件调试

    一、应用程序正常启动的调试:
    1、查看当前设备(本人使用android studio自带4.0的设备)
    adb devices
    2、adb shell
    3、cd/data/local/tmp
    4、查看当前文件夹内容
    ls
    5、删除指定文件
    rm android_server
    6、rm as
    7、exit
    8、添加ida中的android_server 文件
    adb push android_server /data/local/tmp
    注:android_server 所在的目录(IDA 7.0\IDA_Pro_v7.0_Portable\dbgsrv)
    9、添加可执行权限
    chmod 777 as(android_server重新命名后的文件 )
    10、执行文件
    ./as
    11、开启另一个cmd,进行端口转发
    adb forward tcp:23946 tcp:23946
    二、应用程序调试模式启动的调试:
    1、adb shell
    2、cd/data/local/tmp
    3、ls
    4、./as -p31928(非调试模式不用加端口号)
    5、adb forward tcp:31928 tcp:31928(开启另一个cmd,进行端口转发)
    6、adb shell am start -D -n com.linktrust.student.ndkregistdemo/.MainActivity (非调试 模式去掉-D)
    7、jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700(恢复程序运行)

    展开全文
  • 该AAR文件里面的so文件,并不都是是ELF格式的lib文件(可以通过unix command file来查看),有两个是"PEM certificate"和“data”类型的文件。像这样的文件,如果按照上一篇的方法来打包的话,会由于文件...
  •  公司最新开发自己的产品,需要集成视频录制功能,导入so文件后,运行项目报错,手机上显示“XXX应用已停止”,查看错误log so文件找不到,于是查看项目libs/armeabi-v7a里存在了so文件,想到每个libs目录下有匹配...
  • ultraedit 查看文件

    2018-01-10 15:23:00
    转自:https://wenda.so.com/q/1481655902726192 1 UltraEdit在打开文件的时候,会对文件...2 如果没有识别为二进制文件,但是想查看16进制显示内容,即以二进制文件方式进行查看编辑,可以点击菜单编辑,选择...
  • 该AAR文件里面的so文件,并不都是是ELF格式的lib文件(可以通过unix command file来查看),有两个是"PEM certificate"和“data”类型的文件。像这样的文件,如果按照上一篇的方法来打包的话,会由于文件类型检查不...
  • 首先查看Android Studio中关于Subversion的配置,如下图: 发现配置的是使用全局设置,全局的svn配置文件放在~/.subversion路径下,打开这个路径; 找到config文件,打开; 将global-ignore的...
  • <p>I want to parse the contents of a dynamic .csv file....<p>I should mention that I've only used Chrome so far, but I don't see why it would make a difference. <p>Many thanks, Andreas </div>
  • ld.so.conf.d配置文件

    2015-05-08 17:25:56
    在/etc下我们会发现下面三个文件ld.so.conf.dld.so.confld.so.cache查看ld.so.conf以后可以看到是包含了ld.so.conf.d中的所有配置文件includeld.so.conf.d/*.conf查看ld.so.conf.d中的内容可以看到配置文件很多[root...
  • 自己写了一个demo,内容狠简单: so中就做一个加法运算,代码逻辑如下:   然后这样调用:   在IDA中查看代码的相对地址是BBC   然后执行androidserver...然后ctrl+s找到自己的so文件,双击进去之后  
  • 服务器不停的向外发包,且CPU持续100%...查阅crond相关日志,发现实际执行的内容为/lib/libudev.so ,以此为关键字进行查询,找到如下内容: 1.1 工具/原料 Linux系统 病毒文件libudev.so 1.2 方法/步骤 1....
  • 编写shell脚本,对某个文件夹内搜索指定文件并对文件内容进行更改: 在桌面创建shell_test文件夹 ...分别在每文件中写入内容:The moon is so round tonight,查看文件内容:   任务:搜索所有名为‘file...
  • 服务器不停的向外发包,...查阅crond相关日志,发现实际执行的内容为/lib/libudev.so ,以此为关键字进行查询,找到如下内容: 方法/步骤 1 1.網路流量暴增,使用 top 觀察有至少一個 10 個隨機字母組成...
  • 虽然文件内容并没有改变,但git status显示目录下所有文件都被标识有更改 用git diff filename命令查看不同,结果若下图: 这里提示的不同,是文件的权限改变了。 SO,解决方案奏是:不让git检测文件权限的区别 ...
  • 如何查看静态库内容 Unix/Linux

    千次阅读 2016-11-07 17:46:16
    如何查看静态库内容 Unix/Linux 以下从最好情况->最坏情况: 1. 最好知道静态库的原文件(.c),要是知道声明文件(.h)也比较好。 2. ar -t YourFile 看其结构,找其中的原文件。 3. 可以将库文件下到...
  • 查看《 ,以提醒您高质量,专业的自述文件应包含的所有内容。 使用以下命令将调用该应用程序: node index.js 由于不会部署此应用程序,因此,您还需要提供一个演示其功能的演练视频的链接。 重新阅读前作中的...
  • 如何查看静态库内容 Unix/Linux

    千次阅读 2010-09-25 15:38:00
    如何查看静态库内容 Unix/Linux     ar -t file nm file     以下从最好情况->最坏情况: 1. 最好知道静态库的原文件(.c),要是知道声明文件(.h)也比较好。...
  • 让我们让您了解这里的内容以及如何使用它。 此TSDX设置用于开发可发布到NPM的库(不是应用程序!)。 如果要构建Node应用程序,则可以使用ts-node-dev ,plain ts-node或简单的tsc 。 如果您是TypeScript的新手,...
  • 今天在Linux机器上安装JDK,安装完成后,查看安装版本:java -version,遇到了如下问题: ... 命令执行完成之后,继续输入 java -version 查看安装结果,得到如下内容:    问题成功解决!...
  • 写本编内容,主要是新手...百度很多,或者可以查看我的 另一篇文章Mac 下 Android Studio 3.3 简单生成so文件https://mp.csdn.net/postedit/89642794 二.将 .so 文件放入另一个工程。 1、新建android项目 2. 把...
  • 版本回退 前面我们成功的提交了一次mygit.txt,...可以看到hellogit.txt已经被修改过了,到底这次修改的内容与上次的内容有什么不同的,咱们可以使用git diff查看: 当然你也可以查看上次提交的信息,使用git log:

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 256
精华内容 102
关键字:

查看so文件内容