首页
社区
课程
招聘
[求助]获取到elf可执行文件的entry后,怎么传递参数?
发表于: 2020-4-21 17:41 2718

[求助]获取到elf可执行文件的entry后,怎么传递参数?

2020-4-21 17:41
2718
目前做的功能是:自定义linker加载可执行程序并执行。
目前遇到了下面问题,有没有大神帮忙解答一下,小弟刚入门不久:
1、自己实现的linker把可执行文件加载到内存后,获取到soinfo的entry即为可执行程序的入口,那么自定义的linker怎么把参数传给可执行程序,即argc,argv,env.
通过反编译可以知道可执行文件的参数前面四个int是无效的,后面的可变参数才是真正的部分,请问自定义linker怎么才能实现这种效果传参。


-------------------------自己回答下----------------------------------------------------------------------------------------------------
自己贴一下代码
int start_main(int (*run_main)(void),int argc, char **argv, char **envp) {
    volatile int  raw_args[100];

    memcpy(raw_args, argv, sizeof(int) * argc);
    raw_args[0] = argc - 1; 
    raw_args[argc] = 0; 
    int i = 0; 
    char **nvp = envp;
    while (*nvp) {
        nvp++;
        i++; 
    }    
    memcpy(&raw_args[1 + argc], envp, sizeof(int) * i);
    raw_args[argc + i] = 0; 

    return run_main();
}

raw_args 会被sp指针压缩入栈作为run_main的参数,其中参数格式如下:




[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2020-4-22 17:44 被糊涂先生编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1096
活跃值: (379)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
问题就是答案,
_lib_init实现是不是将变参赋值给main并调用。
entry入口调用,无非就是typedef对应函数类型,赋值addr,call。
2020-4-22 09:26
0
雪    币: 217
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢大佬的支持
2020-4-22 17:44
0
游客
登录 | 注册 方可回帖
返回