开个新坑,分析一些高端代码的反汇编程序,先从常见的下手,分析一下strlen。
函数介绍
size_t strlen( const char *string );
非常常用的一个函数,看起来应该很简单,所以从它下刀子了。
Return Value
Each of these functions returns the number of characters in string, excluding the terminal NULL. No return value is reserved to indicate an error.
Parameter
string
Null-terminated string
反汇编
4B2F5D60 strlen proc near ; DATA XREF: 4B28338E↑o
4B2F5D60 ; off_4B3792F8↓o
4B2F5D60
4B2F5D60 arg_0 = dword ptr 4
4B2F5D60
4B2F5D60 mov ecx, [esp+arg_0];//将字符串地址放到ecx中
4B2F5D64 test ecx, 3;//看字符串的地址是不是以00结尾,即判断字符串地址有没有以DWORD对齐
4B2F5D6A jz short loc_4B2F5D90;//若对齐,则跳转,选用4个字节为单位的方式进行长度计算,否则按字节计算
4B2F5D6C
4B2F5D6C loc_4B2F5D6C: ; CODE XREF: strlen+1B↓j
4B2F5D6C mov al, [ecx];//将ecx当前指向的字符放入al寄存器中
4B2F5D6E add ecx, 1
4B2F5D71 test al, al;<