|
#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输出变量和常量的区别。 |
289

被折叠的 条评论
为什么被折叠?



