-
-
Notifications
You must be signed in to change notification settings - Fork 168
fix(lookup_kallsyms): 修复符号表查询问题 #1443
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@claude review this pr in Chinese. |
|
Claude finished @fslongjin's task —— View job Claude 代码审查任务我已审查了PR #1443关于修复符号表查询问题的代码变更。 待办事项清单:
审查总结正面反馈
发现的问题1. 边界情况处理有缺陷问题位置: 当前实现: let index = match kallsyms_address_list.binary_search(&addr) {
Ok(i) => i,
Err(i) => {
// 符号不存在
if i == sym_num {
i
} else {
i - 1 // 这里有bug!
}
},
};问题:
2. 空符号表处理问题位置: addr - kallsyms_address_list[sym_num - 1]如果
3. 逻辑不一致性当 改进建议1. 修复边界情况处理let index = match kallsyms_address_list.binary_search(&addr) {
Ok(i) => i, // 精确匹配
Err(i) => {
// i 是插入位置
match i {
0 => sym_num, // 地址小于所有符号:无匹配
_ => i - 1, // 返回前一个符号的索引
}
},
};或者更清晰地: let index = match kallsyms_address_list.binary_search(&addr) {
Ok(i) => i,
Err(0) => sym_num, // 地址小于第一个符号
Err(i) if i == sym_num => i - 1, // 地址大于最后一个符号
Err(i) => i - 1, // 地址在两个符号之间
};2. 添加空符号表检查在函数开始处添加: if sym_num == 0 {
println!("[{}] function:unknown \t(+) {:04} address:{:#018x}", level, 0, addr);
return false;
}3. 改进错误处理考虑将 let sym_name = match CStr::from_ptr(sym_names.add(sym_names_index[index] as usize) as _)
.to_str()
{
Ok(name) => name,
Err(_) => "<invalid-utf8>",
};4. 小改进
性能考虑
安全性
建议的修改基于以上分析,建议修复边界情况处理,特别是 注意:以上是代码审查反馈。如果需要我帮助实现这些修复,请告知。 |
|
@goldwind-ting ping~ hello, there are some issue in this PR~ |
e5d0673 to
92c3cec
Compare
重新修改了 |
6e5d2fa to
0ba8ead
Compare
|
@Godones hey哥们,可以麻烦帮忙看看这里的吗~ |
|
@goldwind-ting 如果地址大于最后一个符号,也返回sym_num比较合理 |
|
如果可以获取最后一个符号对应函数结尾的地址sym_end_addr,可以在函数开始判断下: |
qs应该是可行的 |
实际上最后一个符号是 |
0ba8ead to
0593245
Compare
原有逻辑addr刚好等于kallsyms_adress_list[i+1]时,索引index值会是i,但是实际上是i+1;现在修改为通过二分查找符号
0593245 to
7c25a1c
Compare
fslongjin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
|
你好!感谢你的贡献!该PR看起来解决了问题!不过在合入之前,需要您对您的github账号做一个小更改:
dragonos社区需要commit可追溯(以便联系到开发者),因此需要麻烦您关闭匿名邮箱功能,方法请见: 一旦您关闭了这个功能,我会尽快把PR合入~感谢 |


原有逻辑addr刚好等于kallsyms_adress_list[i+1]时,索引index值会是i,但是实际上是i+1;现在修改为通过二分查找符号
Fixes #1402