需要跳转的偏移大于32位数值,会直接报allocfail
Closed this issue · 11 comments
@Menooker 大佬,有没有什么通用简单的解法?我们是hook exit,是比较确定的,倒是可以强行改成绝对地址。
如果要通用,是不是要把所有的lea,mov那些都枚举一遍来转换。
在我最新的pr里面,修复了一个mmap搜索地址的错误,你可以试一下那个分支嘛?其实我本地也遇到了alloc失败的问题。还有就是你可以调整一下MemChunk的buffer大小嘛?目前是8MB,最小到4kb都是可以的
好滴,感谢大佬,我去试试
大佬,抱歉现在才回复您,非常感谢您的建议!
MCHUNK_SZ 大小吧?这个如果太大,可能塞不到已经分配内存的缝隙里面
我调成了4k是可以的。
有个小疑问,我看在代码里面获取了页表大小,为什么不直接用页表大小来调用mmap?而是要用8M作为mmap的大小。这里有什么讲究吗?
在我最新的pr里面,修复了一个mmap搜索地址的错误,你可以试一下那个分支嘛?其实我本地也遇到了alloc失败的问题。还有就是你可以调整一下MemChunk的buffer大小嘛?目前是8MB,最小到4kb都是可以的
另外, 我用了最新提交,还是会报alloc错误。
不过我注意到一个问题,不知道我有没有看懂代码,好像遍历寻找合适mmap范围的时候并没有比较addr跟mmap的返回值两者之间的大小,可能我的系统有点老,ubuntu16的,mmap出来的地址会比较小(addr > mmap_retvalue
),但是范围变化却是tryaddr-=search_step
,我尝试着改成了+=就可以返回成功了。
Line 168 in b83acd4
8mb原来是想一次多分配一些内存,这样可以减少mmap的次数,因为每次mmap我们都要浪费MemChunk头上几个字节来管理内存。
搜索mmap地址的问题确实需要改进,应该从addr的前后2gb内存的范围进行搜索。此外下面addr_ok这边已经检查了地址差距是否在2gb以内了。
我接下来提个pr改进搜索算法,到时候能否麻烦您测一下呢?谢谢!
谢谢大佬解答!
我接下来提个pr改进搜索算法,到时候能否麻烦您测一下呢?
可以的,你提交之后记得@我一下,我怕我可能没看到
@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦
@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦
大佬,我已经测过了,我看到提交中改成了pagesize,我试了pagesize和8M的情况,都符合预期。
@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦
大佬,我已经测过了,我看到提交中改成了pagesize,我试了pagesize和8M的情况,都符合预期。
谢谢~很开心问题得到解决了。pr已经合并!