 |
级别:
|
|
积分:1440分 |
|
注册:2007年11月12日
|
|
|
.........................
.text:006123EC loc_6123EC: ; CODE XREF: sub_612310+C1j .text:006123EC mov eax, [ebx+8] .text:006123EF push ebp ; FILE * .text:006123F0 push 1 ; size_t .text:006123F2 lea ecx, [esp+70h+var_54] .text:006123F6 push 4 ; size_t//读取4个字节 这里读取 数组的总数 .text:006123F8 push ecx ; void * .text:006123F9 mov [esp+78h+var_4C], eax .text:006123FD mov [ebx+8], edx .text:00612400 call ds:fread //这里应该是调用读取函数 将 4个字节转换成 整型数据 .text:00612406 mov eax, [esp+78h+var_54]//这里 esp+78h+var_54 应该是总数 变量 .text:0061240A add esp, 10h .text:0061240D xor esi, esi .text:0061240F test eax, eax .text:00612411 mov [esp+68h+var_58], esi .text:00612415 jle loc_612672 //进入循环如果接着读取数据位空 则读取结束关闭文件 .text:00612415 .text:0061241B //如下进入读取循环,每组32个字节读取,没读取一组 然后转换一组数据/然后接着读取下组数据 .text:0061241B loc_61241B: ; CODE XREF: sub_612310+35Cj .text:0061241B push ebp ; FILE * .text:0061241C push 1 ; size_t .text:0061241E lea edx, [esp+70h+var_20] //是结构体数组的指针变量? .text:00612422 push 20h ; size_t // 32字节 应该是按照数组整个读取的 .text:00612424 push edx ; void * .text:00612425 call ds:fread //这里调用 fread 函数 开始读取数据 .text:0061242B lea edi, [esp+78h+var_34] // 文件读取指针? .text:0061242F or ecx, 0FFFFFFFFh //这个什么意思 难道是赋值0给ecx 还是? .text:00612432 xor eax, eax //清空 eax .text:00612434 add esp, 10h //16个字节 //指针变量地址+16个字节?? .text:00612437 repne scasb //? .text:00612439 not ecx .text:0061243B dec ecx .text:0061243C mov eax, esi .text:0061243E xor edx, edx .text:00612440 mov edi, [esp+68h+var_20]//78变成68什么意思 两个16个字节 难道是32字节? .text:00612444 div ecx .text:00612446 or ecx, 0FFFFFFFFh //这个什么意思 .text:00612449 mov ebp, [esp+68h+var_18] .text:0061244D movsx eax, byte ptr [esp+edx+68h+var_34]// 进行无符号扩展?? .text:00612452 xor edi, eax // 进行逻辑或 运算么 ? .text:00612454 xor eax, eax .text:00612456 mov [esp+68h+var_20], edi // 转换后 赋值给第一个变量 .text:0061245A lea edi, [esp+68h+var_34] .text:0061245E repne scasb .text:00612460 not ecx .text:00612462 dec ecx .text:00612463 mov eax, esi .text:00612465 xor edx, edx .text:00612467 mov edi, [esp+68h+var_14] .text:0061246B div ecx .text:0061246D or ecx, 0FFFFFFFFh .text:00612470 movsx eax, byte ptr [esp+edx+68h+var_34] .text:00612475 cdq .text:00612476 xor edi, edx .text:00612478 xor ebp, eax .text:0061247A mov [esp+68h+var_14], edi .text:0061247E lea edi, [esp+68h+var_34] .text:00612482 xor eax, eax .text:00612484 xor edx, edx .text:00612486 repne scasb .text:00612488 not ecx .text:0061248A dec ecx .text:0061248B mov eax, esi .text:0061248D div ecx .text:0061248F mov [esp+68h+var_18], ebp .text:00612493 mov ebp, [esp+68h+var_10] .text:00612497 lea edi, [esp+68h+var_34] .text:0061249B xor eax, eax .text:0061249D movsx ecx, byte ptr [esp+edx+68h+var_34] .text:006124A2 xor ebp, ecx .text:006124A4 or ecx, 0FFFFFFFFh .text:006124A7 repne scasb .text:006124A9 not ecx .text:006124AB dec ecx .text:006124AC mov eax, esi .text:006124AE xor edx, edx .text:006124B0 lea edi, [esp+68h+var_34] .text:006124B4 div ecx .text:006124B6 mov ecx, [esp+68h+var_C] .text:006124BA xor eax, eax .text:006124BC mov [esp+68h+var_10], ebp .text:006124C0 movsx edx, byte ptr [esp+edx+68h+var_34] .text:006124C5 xor ecx, edx .text:006124C7 xor edx, edx .text:006124C9 mov [esp+68h+var_C], ecx .text:006124CD or ecx, 0FFFFFFFFh .text:006124D0 repne scasb .text:006124D2 not ecx .text:006124D4 dec ecx .text:006124D5 mov eax, esi .text:006124D7 div ecx .text:006124D9 mov edi, [esp+68h+var_8] .text:006124DD mov ecx, [ebx+0Ch] .text:006124E0 movsx eax, byte ptr [esp+edx+68h+var_34] .text:006124E5 xor edi, eax .text:006124E7 mov eax, [ebx+8] .text:006124EA sub ecx, eax .text:006124EC mov [esp+68h+var_8], edi .text:006124F0 mov ebp, eax .text:006124F2 sar ecx, 5 .text:006124F5 cmp ecx, 1 .text:006124F8 jnb loc_6125B1 .text:006124F8 .text:006124FE mov edx, [ebx+4] .text:00612501 test edx, edx .text:00612503 jz short loc_612511 .text:00612503 .text:00612505 mov ecx, eax .text:00612507 sub ecx, edx .text:00612509 sar ecx, 5 .text:0061250C cmp ecx, 1 .text:0061250F ja short loc_612516 .text:0061250F .text:00612511
............................................
.text:00612672 loc_612672: ; CODE XREF: sub_612310+105j .text:00612672 push ebp ; FILE * .text:00612673 call ds:fclose .text:00612679 add esp, 4 .text:0061267C pop edi .text:0061267D pop esi .text:0061267E pop ebp .text:0061267F pop ebx .text:00612680 add esp, 58h .text:00612683 retn .text:00612683 .text:00612683 sub_612310 endp .text:00612683
反汇编代码用途是 读取一个文件(存储 N组数据)! 文件结构: 总数4字节 存储数据的总组数 每组共32字节 每个存储8个数据 ,每个数据4个字节
存储的数据都是long型
不过都是处理过的,请帮忙看下 是经过哪些处理 (逻辑或 还是逻辑异或 或者其它 )
|