V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eyeshuaji
V2EX  ›  Android

反编译修改 so 后报错: signal 7 (SIGBUS), code 1 (BUS_ADRALN)

  •  
  •   eyeshuaji · 150 天前 · 4408 次点击
    这是一个创建于 150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上网查说是什么数据字节不对齐,但是很少有给出解决方法的,或者是方法无效的,所以还是来问 v 友们。
    第 1 条附言  ·  149 天前

    so地址 就是这个so,修改的指令大概如下 原本是

    vcmp s15,s18
    vmrs aspr_nzcv,fpscr
    vmovmi r1,s18
    vmovpl r1,s15
    

    我改成

    vcmp s15,s18
    vmrs aspr_nzcv,fpscr
    nop
    vmovpl r1,s15
    

    然后就报错了。因为对汇编是个小白,不懂怎么说自己的需求,这代码也不懂到底改的对不对,毕竟这个SO也只是一个小游戏的SO(F1 2016 手游),所以以为没必要把so放出来,直接把报错放出来就能解决问题的。不好意思啊大佬们

    第 2 条附言  ·  149 天前

    链接过期了,补上[新链接] (https://musetransfer.com/m/s/1mu079xjo)是arm-v7a

    第 3 条附言  ·  149 天前
    链接错了,这个才对 https://musetransfer.com/m/s/1mu079xjo
    13 条回复    2024-07-23 11:33:39 +08:00
    eyeshuaji
        1
    eyeshuaji  
    OP
       150 天前
    来个大佬啊
    pursuer
        2
    pursuer  
       150 天前
    错误信息已经说了地址对齐错误。这种问题一般要看源码的,至少要把改了什么发出来,不然没法给出更具体的建议。
    424778940
        3
    424778940  
       150 天前
    没有具体信息和场景怎么判断....
    你要不直接把二进制和你在搞啥丢出来?
    icy37785
        4
    icy37785  
       150 天前 via iPhone   ❤️ 1
    你这问题感觉算命先生才专业对口。
    kkhaike
        5
    kkhaike  
       150 天前
    和你修改有关,你这么问我们咋回答。上附件
    kohinata
        6
    kohinata  
       150 天前   ❤️ 2
    先看一遍《 How To Ask Questions The Smart Way 》可能才是你应该做的事情
    eyeshuaji
        7
    eyeshuaji  
    OP
       149 天前
    @kkhaike #5 已经上了
    eyeshuaji
        8
    eyeshuaji  
    OP
       149 天前
    @424778940 #3 看下附言
    eyeshuaji
        9
    eyeshuaji  
    OP
       149 天前
    @pursuer #2 已经附上 so 了
    424778940
        10
    424778940  
       149 天前
    @eyeshuaji 说了等于没说 你什么平台啊 arm/mips/x86 汇编能是一回事吗?
    424778940
        11
    424778940  
       149 天前
    文件过期 看指令 vmov mi 估计是 vfp 吧 什么版本和架构不知道 楼主不说
    vmov 指令 opcode 估计三四个字节 nop 只有 1-3 个字节 不同平台不一样 但总之跟 vmov 长度不一样
    vmov 带操作数可能会更长 假设你把一个 6 字节的指令+操作数的汇编转化的二进制换成一个 3-4 字节的 nop 指令的二进制
    这能对齐就有鬼了
    一般做法是要么原指令 mov 的输入和输出一样 白倒腾一下来达到 nop 的目的
    要么就补多个 nop 来达到目的
    总之你必须保证改完的文件大小和指令偏移都没有变

    看下来还是在改游戏, 以为你在搞什么难搞且有价值的东西, 不打算继续讨论了
    LGA1150
        12
    LGA1150  
       149 天前 via Android
    > 因为对汇编是个小白,不懂怎么说自己的需求,这代码也不懂到底改的对不对

    你这是有勇无谋啊

    vmovpl 和 vmovmi 是 conditional move ,而 mi 和 pl 正好是两个互斥条件: https://developer.arm.com/documentation/den0013/d/ARM-Thumb-Unified-Assembly-Language-Instructions/Instruction-set-basics/Conditional-execution

    你现在把其中一个改成了 nop ,那么 r1 的值在那个条件下就变成未定义了
    eyeshuaji
        13
    eyeshuaji  
    OP
       148 天前
    好吧,我突然发现这个 so 原本就有问题,此帖终结
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5459 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:46 · PVG 14:46 · LAX 22:46 · JFK 01:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.