运行任意Linux so文件的导出函数

简介

在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

总结

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值