精华内容
下载资源
问答
  • 运行任意Linux so文件的导出函数

    万次阅读 2021-02-26 17:34:34
    简介 在Windows当中有一个rundll32的程序可以运行DLL当中的导出函数, 同样根据原理在Linux平台当中,我们也可以实现相同的功能; 代码 首先下面是全部代码runso.c: #include #include #include jmp_buf buf; void ...

    简介

    在Windows当中有一个rundll32的程序可以运行DLL当中的导出函数, 同样根据原理在Linux平台当中,我们也可以实现相同的功能;

    代码

    首先下面是全部代码runso.c:

    #include<stdio.h>
    #include<dlfcn.h>
    #include <setjmp.h>
    
    jmp_buf buf;
     
    void error_code(void)
    {
       longjmp(buf,1);
    }
    
    typedef void(*func)();
    typedef void(*func1)(void *s);
    typedef void(*func2)(void *s, void *c);
    typedef void(*func3)(void *s, void *c, void *m);
    int main(int argc, char* argv[]){
        if(argc < 3){
            printf("runso file functionname\n");
            return -1;
        }
        static void *handle = NULL;
        char *file_name = argv[1];
        char *function = argv[2];
        handle = dlopen(file_name, RTLD_LAZY);
        if(!handle){
            printf("dlopen error!\n");
            return 0;
        }
       func ptr = dlsym(handle, function);
       if(!ptr){
           printf("Can't find this function!\n");
           return 0;
       }
       printf("%s address: %p\n",function, ptr);
       if(setjmp(buf)==0){
           ptr("1");
       }
       else{
          if(setjmp(buf)==0){
               ptr("2", "3");
           }
           else{
               if(setjmp(buf)==0){
                   ptr();
               }
               else{
                   ptr("4", "5", "6");
               }
           }    
       }
        return 0;
    }
    
    

    编译:

    gcc runso.c -o runso -ldl
    

    运行:

    runso so_file_name function_name  
    

    例子

    通过nm查看so文件的导出函数:

    nm -D ./hook.so
    

    nm

    运行导出函数puts:
    puts

    总结

    基本框架是这样, 其他具体功能可以根据实际修改…

    展开全文
  • Linux系统下,JAVA程序通过JNA技术实现调用C语言编程输出的so库接口函数,从而实现java程序与c程序之间的交互。
  • Unity3D已经有了支持Linux的社区版本。要在Linux环境下开发Unity3D程序,首先要安装Linux版的Unity。地址如下: ...

    Unity3D已经有了支持Linux的社区版本。要在Linux环境下开发Unity3D程序,首先要安装Linux版的Unity。地址如下:

    https://forum.unity3d.com/threads/unity-on-linux-release-notes-and-known-issues.350256/#post-2556301

    1 制作Linux下的动态链接库

    Linux下的动态链接库是.so格式的。首先我们需要写一个c++的文件。为了简单,我们呢可以编写如下例程,文件名为libtest.cpp

    #include <stdio.h>
    extern "C" int sum(int a, int b)
    {
        return a + b;
    }
    
    然后在该文件的当前路径下打开终端,执行如下命令:

    gcc -c -o libtest.o libtest.cpp

    gcc -shared -o libtest.so libtest.o

    这样,我们就获得了libtest.so这个动态链接库。


    2 Unity3D中调用动态链接库

    在C#脚本文件中添加

    [DllImport ("libtest.so", EntryPoint="sum")]
    static extern int sum(int a, int b);

    把上一步中做好的libtest.so文件放在unity3D工程的根目录下。

    到这一步还没有结束,因为Linux环境下,Unity3D默认搜索目录是不包含当前目录的。如果是build出来的程序,我们把so文件和可执行文件放在一起就能执行;但是如果是Unity调试模式下,so文件放在工程根目录下或者Assets/Plugins下,都是找不到的。为了开发方便,我们希望能像windows下一样,在调试模式下也能调用动态库,所以我们就需要修改/etc/profile,在文件末尾加上两行

    LD_LIBRARY_PATH=./

    export LD_LIBRARY_PATH

    这样,就可以让Unity搜索到动态链接库了。

    展开全文
  • 安装linuxso

    2014-06-19 22:13:55
    找不到libz.so.1库的解决办法,重新生成链接文件。
  • Linux so库查看工具

    千次阅读 2016-08-18 09:45:50
    反汇编soLinux工具

    代码运行过程中,难免因各种原因引起crash,如果crash 发生时恰好capture 当时的堆栈信息,对定位错误将是大功一件,然而有时候看到满满的堆栈信息,却不知从何开始入手, 本文介绍几个著名的Linux so 查看工具,掌握它们可能会有事半功倍的效果。

    比如获取下列信息:
    tm::TcpHandler::Open(tm::iohandler_paraset*)+300
    这里已经比较明确指出在Open 函数地址偏移 300 的地方, 那么是否可以获得更详细的信息呢?

    Linux so库查看工具:

    • objdump

    objdump可用来反汇编so库,查看文件可能带有的附加信息。 详细使用时通过 –help 了解,常用参数有:

    -d, --disassemble          Display assembler contents of executable sections
    -D, --disassemble-all      Display assembler contents of all sections
    -S, --source               Intermix source code with disassembly, 这个比较重要
    -s, --full-contents        Display the full contents of all sections requested
    • nm

    nm用来列出目标文件的符号清单。详细使用时通过 –help 了解,常用参数有:

    -a, --debug-syms       Display debugger-only symbols
    -l, --line-numbers     Use debugging information to find a filename and line number for each symbol
    • add2line

    add2line 将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。详细使用时通过 –help 了解。

    -a --addresses         Show addresses
    -b --target=<bfdname>  Set the binary file format
    -e --exe=<executable>  Set the input file name (default is a.out)
    -f --functions         Show function names
    
    展开全文
  • linux x86平台elf 进程注入so并且实现基于rel的hook ubuntu14.01测试通过
  • 问题描述 回归正题,前段时间项目开发中,实现了一个动态库,封装了...对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~ 原因

    问题描述

    回归正题,前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~

    原因

    应用程序进行链接的时候,动态库中全局变量定义,将会被应用程序中同名的全局变量所覆盖。这样也就造成了,在动态库中修改A变量时,应用程序中的A也发生了变化。

    解决方法

    在创建动态链接库时,gcc/g++选项中添加编译选项

    -Wl,-Bsymbolic.

    其中 Wl 表示将紧跟其后的参数,传递给连接器 ldBsymbolic 表示强制采用本地的全局变量定义,这样就不会出现动态链接库的全局变量定义被应用程序的同名定义给覆盖了!
    展开全文
  • Linux SO_KEEPALIVE属性,心跳

    万次阅读 2014-08-05 10:24:34
    * is only used for Linux as we are using Linux-specific APIs to set * the probe send time, interval, and count. */ int anetKeepAlive(char *err, int fd, int interval) { int val = 1; //开启keepalive...
  • linux下编译.so库文件

    热门讨论 2013-01-07 18:27:18
    linux下编译.so库文件
  • linux So链接路径设置

    千次阅读 2013-10-22 10:26:52
    (1) 设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔),系统加载工具ld.so/ld-linux.so将顺序搜索变量指定的目录。例如#$LD_LIBRARY_PATH=/usr/local/mysql/lib ./test_mysql (2) 以root身份把库路径加入/etc/...
  • 获取Linux系统监控信息必备的文件 libsigar-amd64-linux.so和libsigar-x86-linux.so
  • Linux上运行java程序时出现 no libsigar-amd64-linux.so in java.library.path 这个错误时只需将两个文件拷到你的工程下的lib包下即可,亲测。
  • 我在我的android项目中调用同事给我的在linux下编译好的一个so库,怎么调试都不成功。 后来恍然大悟,同事给我的so库是在X86平台下编译的,android手机都采用ARM平台两个平台的指令集都不一样,当然调用不成功了...
  • linux编译so

    千次阅读 2018-03-29 08:50:54
    一、动态库so的编译 以一个例子来说明。 这里有三个so_test.h, test_a.c, test_b.c #ifndef _SO_TEST_H_ #define _SO_TEST_H_ void test_a(); void test_b(); void test_c(); #endif /* _SO_TEST_H_ */#include ...
  • 我的工作最近需要用到linux下构建多目录下Makefile产生so动态库样例的知识,我将最新的学习心得,做一个记录分享,以便以后需要使用时可以做参考。
  • C#如何调用linux so

    千次阅读 2012-06-21 10:09:39
    #gcc -shared -o libtest.so libtest.o 2 、编译 c# 用 windows 的 vs 环境将 main.cs 编译成 main.exe 或 用装有 mono 环境的 linux 将 main.cs 编译成 main.exe: #mcs main.cs ...
  • linux动态库so更新

    千次阅读 2019-01-10 16:41:47
    linux更新so库: 不能直接使用cp进行覆盖,源程序直接段错误。 进入/lib文件夹,先删除原来库文件,再放进去新库文件。 执行ldconfig命令,重新加载so库文件。否则不生效。 动态库生成见之前博客...
  • Linux 生成so库文件并调用

    千次阅读 2019-11-05 17:45:46
    为了不暴露源码,将c文件生成so动态库来给别人调用 记录一下方法 首先简单的创建一些测试文件:test.h a.c b.c c.c 如下: test.h #include <stdio.h> void a(); void b(); void c(); a.c #include "test.h...
  • 这是个LINUX下生成SO文件,和调用SO库的程序示例.
  • linux 什么是SO文件

    万次阅读 多人点赞 2018-11-23 16:15:28
    牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识。  1.so文件是什么?  2.怎么生成以及使用一个so动态库文件?  3.地址空间,以及线程安全.  4.库的初始化,解析:  5...
  • Linux查看so的方法

    千次阅读 2018-09-20 19:03:31
    nm -D test.so
  • linuxso动态库一些不为人知的秘密

    千次阅读 2018-07-04 17:55:35
    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看...
  • ld-linux.so.2的解决方法

    千次阅读 2018-10-15 17:53:42
     bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory    是因为64位系统中安装了32位程序  解决方法:  yum install glibc.i686    重新安装以后还有如下...
  • 1. export LD_LIBRARY_PATH=`具体路径` ...3. 将库文件绝对路径添加到/etc/ls.so.conf文件中,并用ldconfig命令重建ld.so.cache文件(不推荐) 4. 增加编译链接参数 (LDFLAGS = -Wl,--hash-s...
  • Linuxso库获取当前路径【C/C++】

    千次阅读 2020-04-19 10:13:31
    Linuxso库获取当前路径 之前尝试在so库内调用getpwd()来获取当前路径,但是实际上获取到的是调用so库的可执行程序的所在路径,因此改用dladdr()做一些间接处理来获取。 #include <dlfcn.h> static char* ...
  • 将程序依赖的所有库文件拷贝出来 ldd helloworld | awk '{print $3}' | xargs -i cp -L {} /home/zz/lib helloworld是可执行程序名称,/home/zz/lib是拷贝依赖库的目标文件夹 如果需要有选择的拷贝,则可以加入...
  • linux操作系统下 实现java调用so文件

    千次阅读 2018-06-21 10:24:37
    最近公司在做农机自动驾驶...在linux下使用jna调用本地方法的时候,需要将C写成的程序编译为so文件。1.首先编写一个test.c文件#include&lt;stdio.h&gt; int add(int a,int b); int add(int a,int b) {...
  • linux查看.so导出函数

    千次阅读 2017-11-18 15:19:58
    方法一 nm -D *.so 方法二 objdump -tT *.so
  • C++ linux动态库so导出及使用

    千次阅读 2019-04-03 15:11:36
    C++ linux动态库so导出log4cpp linux下编译安装使用宏定义进行区分windows & linux存在不兼容的函数sprint_s snprintf控制linux动态库的导出函数 第一次尝试导出linux动态库,遇到的问题做个记录。 log4cpp ...
  • Linux下C文件编译so文件

    千次阅读 2019-07-28 17:18:39
    首先,检查GCC是否安装 gcc -v 能打印出gcc版本信息,就能直接编译了。 编译: gcc -o libtest.so -shared -fPIC test.c from:https://blog.csdn.net/u012424449/article/details/54617352 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 438,536
精华内容 175,414
关键字:

linuxso

linux 订阅