一段反 ASM 代码分析。。

本文解析了一段汇编代码,展示了局部变量的初始化过程及循环输出机制。通过对指令的逐条解读,揭示了栈帧操作、内存分配、数组初始化等底层细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

00401550 push ebp

00401551 mov ebp,esp

00401553 sub esp,78h

00401556 push ebx

00401557 push esi

00401558 push edi

00401559 lea edi,[ebp-78h]

0040155C mov ecx,1Eh

00401561 mov eax,0CCCCCCCCh

00401566 rep stos dword ptr [edi]

程序正常的载入。。。

00401568 mov dword ptr [ebp-20h],1

0040156F mov dword ptr [ebp-1Ch],2

00401576 mov dword ptr [ebp-18h],3

0040157D mov dword ptr [ebp-14h],4

00401584 mov dword ptr [ebp-10h],5

0040158B xor eax,eax

0040158D mov dword ptr [ebp-0Ch],eax

对一连串地址的初始化,应该是 int 类型,因为是四个字节的对齐方式,并且是一种栈的方式,可以推出是区部的

变量,可以知道,这样的方式和数组很像。。。

00401590 mov dword ptr [ebp-38h],1

00401597 mov dword ptr [ebp-34h],2

0040159E xor ecx,ecx

004015A0 mov dword ptr [ebp-30h],ecx

004015A3 mov dword ptr [ebp-2Ch],4

004015AA xor edx,edx

004015AC mov dword ptr [ebp-28h],edx

004015AF mov dword ptr [ebp-24h],edx

和上边的一样。。。值得一提的是,数组的初始化,同样是从数组的右边到左边的顺序进行的。。。

我们读的时候,直接的读就可以了。。。

 

004015C4 mov dword ptr [ebp-4],0

004015CB jmp main+86h (004015d6)

004015CD mov eax,dword ptr [ebp-4]

004015D0 add eax,1

004015D3 mov dword ptr [ebp-4],eax

004015D6 cmp dword ptr [ebp-4],2

004015DA jge main+0D1h (00401621)

标准的循环语句,先是初始化计数器的值,然后比较循环的大小,满足就继续。。。

004015F4 push offset string "," (0046e02c)

004015F9 mov edx,dword ptr [ebp-4]

004015FC imul edx,edx,0Ch

004015FF lea eax,[ebp+edx-20h]

00401603 mov ecx,dword ptr [ebp-8]

00401606 mov edx,dword ptr [eax+ecx*4]

00401609 push edx

0040160A mov ecx,offset std::cout (0047be90)

0040160F call @ILT+245(std::basic_ostream<char,std::char_traits<char> >::operator<<) (004010fa)

00401614 push eax

00401615 call @ILT+625(std::operator<<) (00401276)

0040161A add esp,8

0040161D jmp main+95h (004015e5)

0040161F jmp main+7Dh (004015cd)

这里是打印了输出,当然如果没有符号表,函数是不会显示的,那就要动态的调试了。。。

根据最后的两个跳转也是可以得到程序应该是两个循环的。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值