字符串处理与反汇编相关知识解析
1. 字符串修剪(Strings Trimming)
1.1 GCC 实现逻辑
在字符串修剪的实现中,GCC 采用了一些特别的策略。通常实现主循环的常见方式是先检查 CR/LF 字符再存储零字符,但 GCC 选择了颠倒这两个步骤。由于存储零字符不能作为第一步,所以需要额外的检查:
1. 处理第一个字符,将其与 CR/LF 匹配,如果不是则退出。
2. 开始循环,存储零字符。
3. 检查 CR/LF 字符并做出决策。
这样做使得主循环变得非常短,有利于现代 CPU 的执行。并且代码使用的是 str_len - 1 ,更像是缓冲区中的索引。GCC 注意到 str_len - 1 语句被使用了两次,因此分配一个变量来始终保存比当前字符串长度小 1 的值,并对其进行递减操作。
1.2 不同架构的实现
1.2.1 ARM64 非优化 GCC(Linaro)4.9
str_trim:
stp x29, x30, [sp, -48]!
add x29, sp, 0
str x0, [x29,24] ; copy input argument into local stack
ldr x0, [x29,24] ; s
bl strlen
str x0, [x29,40] ; str_len variable in local stack
b .L2 ; main loop begin
.L5:
超级会员免费看
订阅专栏 解锁全文
1590

被折叠的 条评论
为什么被折叠?



