strlen和strcpy的识别

字符串处理函数通常会被编译器优化为内联函数,本文试分析VS2015下O2优化的strlen和strcpy的识别特征。

n = strlen(szHello);
00409EA2 8D 45 E8             lea         eax,[szHello]         ;取字符串首地址
00409EA5 83 C4 08             add         esp,8                 ;无关代码
00409EA8 8D 50 01             lea         edx,[eax+1]           ;首地址加1  
00409EAB 0F 1F 44 00 00       nop         dword ptr [eax+eax]   ;作用不明
00409EB0 8A 08                mov         cl,byte ptr [eax]     ;逐个取字符
00409EB2 40                   inc         eax                   ;自增
00409EB3 84 C9                test        cl,cl                 ;判断是否为'\0'
00409EB5 75 F9                jne         main+30h (0409EB0h)   ;do循环首  
00409EB7 2B C2                sub         eax,edx               ;计算长度 

strlen特征:

lea     eax,[String]
lea     edx,[eax+1]
未知语句
mov     cl,[eax]
inc     eax
test    cl,cl
jne     LoopBegin
sub     eax,edx
    strcpy(szBuff, szHello);
00409EA5 33 C0                xor         eax,eax                   ;eax清0
00409EA7 66 0F 1F 84 00 00 00 00 00 nop         word ptr [eax+eax]  ;未知语句  
00409EB0 8A 4C 05 D4          mov         cl,byte ptr szHello[eax]  ;逐个取字符
00409EB4 8D 40 01             lea         eax,[eax+1]               ;仅仅是让eax递增 为什么要用这句呢 是因为其他类型也适用吗 要不inc eax岂不是更快
00409EB7 88 4C 05 E7          mov         byte ptr [ebp+eax-19h],cl ;逐个赋值
00409EBB 84 C9                test        cl,cl                     
00409EBD 75 F1                jne         main+30h (0409EB0h)  

strcpy特征 :

xor     eax,eax
未知语句
mov     cl,String[eax]
lea     eax,[eax+1]
mov     [ebp+eax-ArraryLength],cl
test        cl,cl
jne     LoopBegin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值