00401CBC PUSH cryptex.004032B0 ; |format = “File “%s” not found
in archive.”
00401CC1 CALL DS:[<&MSVCR71.printf>]
00401CC7 ADD ESP,8
00401CCA PUSH 1 ; /status = 1
00401CCC CALL DS:[<&MSVCR71.exit>]
00401CD2 MOV ESI,SS:[ESP+14]
00401CD6 PUSH 0 ; /hTemplateFile = NULL
00401CD8 PUSH 0 ; |Attributes = 0
00401CDA PUSH 2 ; |Mode = CREATE_ALWAYS
00401CDC PUSH 0 ; |pSecurity = NULL
00401CDE PUSH 0 ; |ShareMode = 0
00401CE0 PUSH C0000000 ; |Access = GENERIC_READ |
GENERIC_WRITE
00401CE5 PUSH ESI ; |FileName
00401CE6 CALL DS:[<&KERNEL32.CreateFileA>]
00401CEC CMP EAX,-1
00401CEF MOV SS:[ESP+14],EAX
00401CF3 JNZ SHORT cryptex.00401D13
00401CF5 CALL DS:[<&KERNEL32.GetLastError>]
00401CFB PUSH EAX ; /<%d>
00401CFC PUSH ESI ; |<%s>
00401CFD PUSH cryptex.004032D4 ; |format = “ERROR: Unable to
create file “%s” (Last
Error=%d).”
00401D02 CALL DS:[<&MSVCR71.printf>]
00401D08 ADD ESP,0C
00401D0B PUSH 1 ; /status = 1
00401D0D CALL DS:[<&MSVCR71.exit>]
00401D13 MOV EDX,SS:[ESP+8C]
00401D1A PUSH EDX
00401D1B PUSH EBP
00401D1C PUSH EBX
00401D1D CALL cryptex.00401030
00401D22 TEST EDI,EDI
00401D24 MOV SS:[ESP+2C],EDI
00401D28 FILD DWORD PTR SS:[ESP+2C]
00401D2C JGE SHORT cryptex.00401D34
00401D2E FADD DWORD PTR DS:[403BA0]
00401D34 FDIVR QWORD PTR DS:[403B98]
00401D3A MOV EAX,SS:[ESP+24]
00401D3E XORPS XMM0,XMM0
00401D41 MOV EBP,DS:[<&MSVCR71.printf>]
00401D47 PUSH EAX
00401D48 PUSH cryptex.00403308 ; ASCII “Extracting “%.35s” - “
00401D4D MOVSS SS:[ESP+24],XMM0
00401D53 FSTP DWORD PTR SS:[ESP+34]
00401D57 CALL EBP
Listing 6.8 (continued)
230 Chapter 6