qemu-linux-user ELF vs XCOFF 2

9 篇文章 0 订阅
5 篇文章 0 订阅

最后更新2021/12/16

qemu(4.x)/linux-user/mmap.c 里target_mmap如果offset不是aligned有问题,前面检测后直接退出了,后面做了pread,但走不到这个地方。修改一下,看看效果如何。

如前所说,两种格式差别比较大,不知道谁更优秀,也许是ELF变种太多,年代跨越过久,支持架构跨越很多,导致不得不弄出很多section分别处理。目前我所了解到的xcoff只有那么几个标准的段,以后看复杂的大程序如何实现。

map过程有点乱,走了一天也没全走通,mmap.c里面的几个程序逻辑有点怪异。不管它了,能用就用,不能用就自己写,先把这部分走过去再说。还有一个大小端也挺讨厌的。明天继续。

ELF还有一个interpreter概念,大概类似xcoff的depency或者说libc?又不太像,但关系很密切,先bypass掉。

============================================
map问题不大,但ELF和XCOFF两者结构差别太大,qemu linux-user里大部分实现都配不上,map之后看来要彻底分道扬镳,等到tcg执行的时候再回归吧。

resolve和relocate在别的程序里已经实现,估计copy过来基本没问题,所要做的只是把对应的数据尽力保存在和elf info相关结构类似或者对等的位置。下面一个最重要课题是在什么地方触发返回host api。linux-user还没研究透,看起来是sc(system call)特定指令触发exception,中断tcg执行,然后返回host api。与之对应,jump to 特定地址是否可以呢?应当是可以的,至少我觉得应该没问题。那就可以直接把重定位定义到这个特殊地址,然后返回host。如果不可以,那就要在wrap call里面用特定指令显式地触发。具体哪一种方案,待研究。几天能出结论???

============================================
目前研究结果:
qemu linux-user可以使用sigact_table[sig - 1]触发signal对应的动作,

    if (!sig) {
        sa = NULL;
        handler = TARGET_SIG_IGN;
    } else {
        sa = &sigact_table[sig - 1];
        handler = sa->_sa_handler;
    }

    if (do_strace) {
        print_taken_signal(sig, &k->info);
    }

    if (handler == TARGET_SIG_DFL) {
        /* default handler : ignore some signal. The other are job control or fatal */
        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
        ...
        }
    ...
    }

也就是用exception是可以触发host动作的,但似乎这并非qemu linux-user触发host syscall的方案,一会儿再去看看tcg对sc指令的解码,不是exception,那就应该是tcg实现了。与之对应,可以考虑对ba(jump)tcg指令进行控制,只要jump的目标地址是特定的relocation wrap libc地址,那就trigger host对应的处理。也就是在qemu softmmp里对地址进行验证时搞定。继续验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ensighine

如需特定专题,踢我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值