#include<iostream><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> | #include<iostream> | #include<iostream> | #include<iostream> |
using namespace std; | using namespace std; | using namespace std; | using namespace std; |
int main() | int main() | int main() | int main() |
{ | { | { | { |
int i; | int i; | int i; | int i; |
char c; | char c; | char c; |
|
double d; | double d; |
|
|
float f; |
|
|
|
cin>>i>>c>>d>>f; | cin>>i>>c>>d; | cin>>i>>c; | cin>>i>; |
cout<<i<<c<<d<<f; | cout<<i<<c<<d; | cout<<i<<c; | cout<<i; |
return 0; | return 0; | return 0; | return 0; |
} | } | } | } |
var_20= qword ptr -20h |
|
|
|
var_18= dword ptr -18h |
|
|
|
var_11= byte ptr -11h | var_1C= qword ptr -1Ch |
|
|
var_10= qword ptr -10h | var_11= byte ptr -11h |
|
|
var_8= dword ptr -8 | var_10= qword ptr -10h | var_5= byte ptr -5 |
|
var_4= dword ptr -4 | var_4= dword ptr -4 | var_4= dword ptr -4 | var_4= dword ptr -4 |
argc= dword ptr 8 | argc= dword ptr 8 | argc= dword ptr 8 | argc= dword ptr 8 |
argv= dword ptr 0Ch | argv= dword ptr 0Ch | argv= dword ptr 0Ch | argv= dword ptr 0Ch |
envp= dword ptr 10h | envp= dword ptr 10h | envp= dword ptr 10h | envp= dword ptr 10h |
|
|
|
|
push ebp | push ebp | push ebp | push ebp |
mov ebp, esp | mov ebp, esp | mov ebp, esp | mov ebp, esp |
sub esp, 14h | sub esp, 14h | sub esp, 8 | push ecx |
lea eax, [ebp+var_8] |
|
|
|
push eax |
|
|
|
lea ecx, [ebp+var_10] | lea eax, [ebp+var_10] |
|
|
push ecx | push eax |
|
|
lea edx, [ebp+var_11] | lea ecx, [ebp+var_11] | lea eax, [ebp+var_5] |
|
push edx | push ecx | push eax |
|
lea eax, [ebp+var_4] | lea edx, [ebp+var_4] | lea ecx, [ebp+var_4] | lea eax, [ebp+var_4] |
push eax | push edx | push ecx | push eax |
mov ecx, offset dword_426AD4 | mov ecx, offset dword_425AD4 | mov ecx, offset dword_424AB4 | mov ecx, offset dword_424AB4 |
call sub_401790 | call sub_4015D0 | call sub_401420 | call sub_401400 |
push eax | push eax | push eax |
|
call sub_403C80 | call sub_4038E0 | call sub_4034C0 |
|
add esp, 8 | add esp, 8 | add esp, 8 |
|
mov ecx, eax | mov ecx, eax |
|
|
call sub_401B10 | call sub_4017C0 |
|
|
mov ecx, eax |
|
|
|
call sub_401980 |
|
|
|
push ecx ; float |
|
|
|
fld [ebp+var_8] |
|
|
|
fstp [esp+18h+var_18] |
|
|
|
sub esp, 8 | sub esp, 8 |
|
|
fld [ebp+var_10] | fld [ebp+var_10] |
|
|
fstp [esp+20h+var_20] | fstp [esp+1Ch+var_1C] |
|
|
mov cl, [ebp+var_11] | mov al, [ebp+var_11] | mov dl, [ebp+var_5] |
|
push ecx | push eax | push edx |
|
mov edx, [ebp+var_4] | mov ecx, [ebp+var_4] | mov eax, [ebp+var_4] | mov ecx, [ebp+var_4] |
push edx | push ecx | push eax | push ecx |
mov ecx, offset unk_426A40 | mov ecx, offset unk_425A40 | mov ecx, offset unk_424A20 | mov ecx, offset unk_424A20 |
call sub_401080 | call sub_401060 | call sub_401050 | call sub_401030 |
push eax | push eax | push eax |
|
call sub_403DC0 | call sub_403A20 | call sub_403600 |
|
add esp, 8 | add esp, 8 | add esp, 8 |
|
mov ecx, eax | mov ecx, eax |
|
|
call sub_401580 | call sub_4013C0 |
|
|
mov ecx, eax |
|
|
|
call sub_4013E0 |
|
|
|
xor eax, eax | xor eax, eax | xor eax, eax | xor eax, eax |
mov esp, ebp | mov esp, ebp | mov esp, ebp | mov esp, ebp |
pop ebp | pop ebp | pop ebp | pop ebp |
retn | retn | retn | retn |
反思: | 可以发现其中有部分在主体中的堆栈是不平衡的,如果跟进去会发现retn 4。有些函数是在函数内部实现堆栈平衡的。这段代码可以发现很多东西。要好好仔细研读(各种类型的数在文件中的存放方式)。cout输出char型和其他类型的汇编代码好像有区别。 |
下步: | 比较cout输出变量和常量的区别。 |