菜鸟学反汇编4—cin

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值