首页
社区
课程
招聘
[求助]通过地址调用SO
发表于: 2019-8-10 21:31 5028

[求助]通过地址调用SO

2019-8-10 21:31
5028
原文是:
该算法在libmcto_media_player.so+0x249BC8处 ,然后
void* si=dlopen("/data/local/tmp/libmcto_media_player.so",RTLD_LAZY);
    if(si == NULL)
    {
        printf("dlopen err!\n");
        return 0;
    }
 
    typedef char* (*FUN1)(char* plain);
    void *addr=(void*)(*(int*)((size_t)si+0x8c)+0x249BC9);
    FUN1 func=(FUN1)addr;
不是说好了地址在0x249BC8么,直接si+0x249BC8不行吗?为什么要这样加的?
原文: https://bbs.pediy.com/thread-225018-1.htm

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 916
活跃值: (3434)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
 si是soinfo,不是so指针。
2019-8-11 10:25
0
雪    币: 0
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
葫芦娃 [em_38] si是soinfo,不是so指针。
大牛,那 +0x8c呢?
2019-8-11 10:31
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
虽然我不知道0x8c是什么,但是一猜就能猜到是handle或者基地址啊
2019-8-11 11:03
0
雪    币: 0
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
iceway 虽然我不知道0x8c是什么,但是一猜就能猜到是handle或者基地址啊
这也是只大牛,你快去看看怎么求的,看完了你功力直逼十八层
2019-8-11 12:04
0
雪    币: 7
活跃值: (275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
dlopen返回的是soinfo指针,去看看soinfo的Struct定义在linker.h中
#define SOINFO_NAME_LEN 128
struct soinfo {
 public:
  char name[SOINFO_NAME_LEN];//0x0
  const Elf32_Phdr* phdr;//上面的SOINFO_NAME_LEN 宏定义为128,转成十六进制就是0x80,所以这里的相对偏移地址为0x80
  size_t phnum;//0x84
  Elf32_Addr entry;//0x88
  Elf32_Addr base;//0x8c
  unsigned size;
   ...
   ...
     };
其中Elf32_Addr  大小:4  说明:无符号程序地址
0x8c就是这么来的,表明为内存中的si->base 也就是内存中so文件的起始地址,后面的0x249BC9就不用说了吧。
最后于 2019-8-12 08:15 被wx_心如止水编辑 ,原因:
2019-8-12 08:12
3
雪    币: 0
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
wx_心如止水 dlopen返回的是soinfo指针,去看看soinfo的Struct定义在linker.h中#define SOINFO_NAME_LEN 128struct&a ...
感谢巨牛啊
2019-9-23 15:51
0
游客
登录 | 注册 方可回帖
返回
//