01371563 mov esi,esp
01371565 push offset string "pause" (1377804h)
0137156A call dword ptr [__imp__system (137A3F4h)]
01371570 add esp,4
01371573 cmp esi,esp
01371575 call @ILT+420(__RTC_CheckEsp) (13711A9h)
在调用system("pause")之前,将esp的值赋值给esi,调用结束后,比较esi和esp是否相等。
__RTC_CheckEsp的代码如下:
_RTC_CheckEsp:
01371F90 jne esperror (1371F93h)
01371F92 ret
当esi和esp不相等的时候,跳转到esperror处,否则就直接返回函数。esperror调用了__RTC_Failure
esperror:
01371F93 push ebp
01371F94 mov ebp,esp
01371F96 sub esp,0
01371F99 push eax
01371F9A push edx
01371F9B push ebx
01371F9C push esi
01371F9D push edi
01371F9E mov eax,dword ptr [ebp+4]
01371FA1 push 0
01371FA3 push eax
01371FA4 call _RTC_Failure (1371226h)
01371FA9 add esp,8
01371FAC pop edi
01371FAD pop esi
01371FAE pop ebx
01371FAF pop edx
01371FB0 pop eax
01371FB1 mov esp,ebp
01371FB3 pop ebp
01371FB4 ret
__RTC_Failure打印出错信息。failwithmessage,应该就是打印错误信息。
_RTC_Failure:
01372830 mov edi,edi
01372832 push ebp
01372833 mov ebp,esp
01372835 mov eax,dword ptr [errnum]
01372838 cmp eax,4
0137283B ja _RTC_Failure+31h (1372861h)
0137283D mov ecx,dword ptr _RTC_ErrorLevels (137900Ch)[eax*4]
01372844 mov edx,dword ptr _RTC_ErrorMessages (1377C0Ch)[eax*4]
0137284B cmp ecx,0FFFFFFFFh
0137284E je _RTC_Failure+2Fh (137285Fh)
01372850 push edx
01372851 push eax
01372852 mov eax,dword ptr [retaddr]
01372855 push ecx
01372856 push eax
01372857 call failwithmessage (13728A0h)
0137285C add esp,10h
0137285F pop ebp
01372860 ret