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

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

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

你这是有勇无谋啊

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
148 天前
好吧,我突然发现这个 so 原本就有问题,此帖终结

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX