Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

需要跳转的偏移大于32位数值,会直接报allocfail #11

Closed
jacksonfu opened this issue Jun 13, 2024 · 11 comments
Closed

需要跳转的偏移大于32位数值,会直接报allocfail #11

jacksonfu opened this issue Jun 13, 2024 · 11 comments

Comments

@jacksonfu
Copy link

#9 mmap出来的位置至少比旧函数的地址大INT32_MAX,代码中会导致出错。

@jacksonfu
Copy link
Author

@Menooker 大佬,有没有什么通用简单的解法?我们是hook exit,是比较确定的,倒是可以强行改成绝对地址。
如果要通用,是不是要把所有的lea,mov那些都枚举一遍来转换。

@Menooker
Copy link
Owner

在我最新的pr里面,修复了一个mmap搜索地址的错误,你可以试一下那个分支嘛?其实我本地也遇到了alloc失败的问题。还有就是你可以调整一下MemChunk的buffer大小嘛?目前是8MB,最小到4kb都是可以的

@Menooker
Copy link
Owner

试试看调整一下

#define MCHUNK_SZ (8*1024*1024)

MCHUNK_SZ 大小吧?这个如果太大,可能塞不到已经分配内存的缝隙里面

1 similar comment
@Menooker
Copy link
Owner

试试看调整一下

#define MCHUNK_SZ (8*1024*1024)

MCHUNK_SZ 大小吧?这个如果太大,可能塞不到已经分配内存的缝隙里面

@jacksonfu
Copy link
Author

好滴,感谢大佬,我去试试

@jacksonfu
Copy link
Author

jacksonfu commented Jun 14, 2024

大佬,抱歉现在才回复您,非常感谢您的建议!

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,我尝试着改成了+=就可以返回成功了。

for(auto tryaddr = addr;;tryaddr-=search_step){

@Menooker
Copy link
Owner

Menooker commented Jun 14, 2024

8mb原来是想一次多分配一些内存,这样可以减少mmap的次数,因为每次mmap我们都要浪费MemChunk头上几个字节来管理内存。

搜索mmap地址的问题确实需要改进,应该从addr的前后2gb内存的范围进行搜索。此外下面addr_ok这边已经检查了地址差距是否在2gb以内了。

我接下来提个pr改进搜索算法,到时候能否麻烦您测一下呢?谢谢!

@jacksonfu
Copy link
Author

谢谢大佬解答!

我接下来提个pr改进搜索算法,到时候能否麻烦您测一下呢?

可以的,你提交之后记得@我一下,我怕我可能没看到

@Menooker
Copy link
Owner

@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦

@jacksonfu
Copy link
Author

@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦

大佬,我已经测过了,我看到提交中改成了pagesize,我试了pagesize和8M的情况,都符合预期。

@Menooker
Copy link
Owner

@jacksonfu #12 我提交了这个PR,能不能帮忙测试一下?谢谢啦

大佬,我已经测过了,我看到提交中改成了pagesize,我试了pagesize和8M的情况,都符合预期。

谢谢~很开心问题得到解决了。pr已经合并!

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants