编程技术点滴三(C/C++)
2007-02-19 23:49
211 查看
mov ecx,[ebp-2ch]
mov edx,[ecx]
and edx,80000000h
neg edx
sbb edx,edx
neg edx
mov [ebp-38h],edx
其对应的C代码为:
var_38=(*var_2c)&0x80000000?1:0
switch...case语句,在VC6编译器下,比较语句将按照case值由小到大排列,而代码则按照程序员书写的从后到前的顺序汇编:如下面的语句:
switch(var_d8)
{
case 0xff:
{
var_cc=0;
for (;var_cc<4;var_cc++)
{
var_28[var_cc]=arg_1[var_cc];
(&var_28[4])[var_cc]=arg_1[var_cc] ^ (&arg_1[4])[var_cc];
}
p9(var_c8,var_28,arg_2);
break;
}
case 0:
{
var_cc=0;
for (;var_cc<4;var_cc++)
{
arg_2[var_cc]=var_c8[var_cc];
(&arg_2[4])[var_cc]=(&var_c8[4])[var_cc];
}
break;
}
case 1:
{
p9(arg_1,var_c8,arg_2);
break;
}
}
将被汇编成:
cmp dword ptr [ebp-0xDC], 0
je 1_00404D64
cmp dword ptr [ebp-0xDC], 1
je 1_00404DC8
cmp dword ptr [ebp-0xDC], 0xFF
je 1_00404CE2
jmp 1_00404DDF
1_00404CE2:
mov word ptr [ebp-0xCC], 0
jmp 1_00404CFF
1_00404CED:
mov ax, [ebp-0xCC]
add ax, 1
mov [ebp-0xCC], ax
1_00404CFF:
movsx ecx, word ptr [ebp-0xCC]
cmp ecx, 4
jge 1_00404D4B
movsx edx, word ptr [ebp-0xCC]
movsx eax, word ptr [ebp-0xCC]
mov ecx, [ebp+0xC]
mov edx, [ecx+edx*4]
mov [ebp+eax*4-0x28], edx
movsx eax, word ptr [ebp-0xCC]
movsx ecx, word ptr [ebp-0xCC]
mov edx, [ebp+0xC]
mov esi, [ebp+0xC]
mov eax, [edx+eax*4]
xor eax, [esi+ecx*4+0x10]
movsx ecx, word ptr [ebp-0xCC]
mov [ebp+ecx*4-0x18], eax
jmp 1_00404CED
1_00404D4B:
mov edx, [ebp+0x10]
push edx
lea eax, [ebp-0x28]
push eax
lea ecx, [ebp-0xC8]
push ecx
call 1_0040100F
add esp, 0xC
jmp 1_00404DDF
1_00404D64:
mov word ptr [ebp-0xCC], 0
jmp 1_00404D81
1_00404D6F:
mov dx, [ebp-0xCC]
add dx, 1
mov [ebp-0xCC], dx
1_00404D81:
movsx eax, word ptr [ebp-0xCC]
cmp eax, 4
jge 1_00404DC6
movsx ecx, word ptr [ebp-0xCC]
movsx edx, word ptr [ebp-0xCC]
mov eax, [ebp+0x10]
mov ecx, [ebp+ecx*4-0xC8]
mov [eax+edx*4], ecx
movsx edx, word ptr [ebp-0xCC]
movsx eax, word ptr [ebp-0xCC]
mov ecx, [ebp+0x10]
mov edx, [ebp+edx*4-0xB8]
mov [ecx+eax*4+0x10], edx
jmp 1_00404D6F
1_00404DC6:
jmp 1_00404DDF
1_00404DC8:
mov eax, [ebp+0x10]
push eax
lea ecx, [ebp-0xC8]
push ecx
mov edx, [ebp+0xC]
push edx
call 1_0040100F
add esp, 0xC
1_00404DDF:
jmp 1_00404C62
mov edx,[ecx]
and edx,80000000h
neg edx
sbb edx,edx
neg edx
mov [ebp-38h],edx
其对应的C代码为:
var_38=(*var_2c)&0x80000000?1:0
switch...case语句,在VC6编译器下,比较语句将按照case值由小到大排列,而代码则按照程序员书写的从后到前的顺序汇编:如下面的语句:
switch(var_d8)
{
case 0xff:
{
var_cc=0;
for (;var_cc<4;var_cc++)
{
var_28[var_cc]=arg_1[var_cc];
(&var_28[4])[var_cc]=arg_1[var_cc] ^ (&arg_1[4])[var_cc];
}
p9(var_c8,var_28,arg_2);
break;
}
case 0:
{
var_cc=0;
for (;var_cc<4;var_cc++)
{
arg_2[var_cc]=var_c8[var_cc];
(&arg_2[4])[var_cc]=(&var_c8[4])[var_cc];
}
break;
}
case 1:
{
p9(arg_1,var_c8,arg_2);
break;
}
}
将被汇编成:
cmp dword ptr [ebp-0xDC], 0
je 1_00404D64
cmp dword ptr [ebp-0xDC], 1
je 1_00404DC8
cmp dword ptr [ebp-0xDC], 0xFF
je 1_00404CE2
jmp 1_00404DDF
1_00404CE2:
mov word ptr [ebp-0xCC], 0
jmp 1_00404CFF
1_00404CED:
mov ax, [ebp-0xCC]
add ax, 1
mov [ebp-0xCC], ax
1_00404CFF:
movsx ecx, word ptr [ebp-0xCC]
cmp ecx, 4
jge 1_00404D4B
movsx edx, word ptr [ebp-0xCC]
movsx eax, word ptr [ebp-0xCC]
mov ecx, [ebp+0xC]
mov edx, [ecx+edx*4]
mov [ebp+eax*4-0x28], edx
movsx eax, word ptr [ebp-0xCC]
movsx ecx, word ptr [ebp-0xCC]
mov edx, [ebp+0xC]
mov esi, [ebp+0xC]
mov eax, [edx+eax*4]
xor eax, [esi+ecx*4+0x10]
movsx ecx, word ptr [ebp-0xCC]
mov [ebp+ecx*4-0x18], eax
jmp 1_00404CED
1_00404D4B:
mov edx, [ebp+0x10]
push edx
lea eax, [ebp-0x28]
push eax
lea ecx, [ebp-0xC8]
push ecx
call 1_0040100F
add esp, 0xC
jmp 1_00404DDF
1_00404D64:
mov word ptr [ebp-0xCC], 0
jmp 1_00404D81
1_00404D6F:
mov dx, [ebp-0xCC]
add dx, 1
mov [ebp-0xCC], dx
1_00404D81:
movsx eax, word ptr [ebp-0xCC]
cmp eax, 4
jge 1_00404DC6
movsx ecx, word ptr [ebp-0xCC]
movsx edx, word ptr [ebp-0xCC]
mov eax, [ebp+0x10]
mov ecx, [ebp+ecx*4-0xC8]
mov [eax+edx*4], ecx
movsx edx, word ptr [ebp-0xCC]
movsx eax, word ptr [ebp-0xCC]
mov ecx, [ebp+0x10]
mov edx, [ebp+edx*4-0xB8]
mov [ecx+eax*4+0x10], edx
jmp 1_00404D6F
1_00404DC6:
jmp 1_00404DDF
1_00404DC8:
mov eax, [ebp+0x10]
push eax
lea ecx, [ebp-0xC8]
push ecx
mov edx, [ebp+0xC]
push edx
call 1_0040100F
add esp, 0xC
1_00404DDF:
jmp 1_00404C62
相关文章推荐
- 编程技术点滴
- 编程技术点滴一(Delphi)
- VC编程技术点滴(七)简单的数据库应用开发
- 编程技术点滴一(Delphi)
- 加入SOA技术圈测试第一篇:ABAP 编程点滴(不断更新中)
- VC编程技术点滴(八)如何在视图类中获取主窗口指针
- VC编程技术点滴(二)定义一个简单的对话框
- VC编程技术点滴(四)鼠标绘制任意图形
- 编程技术点滴三(C/C++)
- 编程技术点滴三(C/C++)
- [技术讨论]关于交换编程实践的交换周期问题
- 我常去的编程技术网站【引自CSDN】
- CUDA编程经验技术总结 系列之《内存模块》
- MySQL技术内幕-SQL编程-2
- Java 编程技术中汉字问题的分析及解决
- JAVA专题技术综述之线程篇-Java基础-Java-编程开发
- Linux驱动技术(三) _DMA编程
- 程序员编程技术迅速提高的终极攻略
- Java 编程技术中汉字问题的分析及解决
- IP多播技术及其编程