Post #73,009
1/6/03 4:36:04 PM
|
Re: Request...
OK:
\tTITLE\tC:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp \t.386P include listing.inc if @Version gt 510 .model FLAT else _TEXT\tSEGMENT PARA USE32 PUBLIC 'CODE' _TEXT\tENDS _DATA\tSEGMENT DWORD USE32 PUBLIC 'DATA' _DATA\tENDS CONST\tSEGMENT DWORD USE32 PUBLIC 'CONST' CONST\tENDS _BSS\tSEGMENT DWORD USE32 PUBLIC 'BSS' _BSS\tENDS $$SYMBOLS\tSEGMENT BYTE USE32 'DEBSYM' $$SYMBOLS\tENDS $$TYPES\tSEGMENT BYTE USE32 'DEBTYP' $$TYPES\tENDS _TLS\tSEGMENT DWORD USE32 PUBLIC 'TLS' _TLS\tENDS ;\tCOMDAT _main _TEXT\tSEGMENT PARA USE32 PUBLIC 'CODE' _TEXT\tENDS FLAT\tGROUP _DATA, CONST, _BSS \tASSUME\tCS: FLAT, DS: FLAT, SS: FLAT endif PUBLIC\t_main PUBLIC\t__real@8@400ff120000000000000 EXTRN\t_pow:NEAR EXTRN\t__chkesp:NEAR EXTRN\t__fltused:NEAR ;\tCOMDAT __real@8@400ff120000000000000 ; File C:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp CONST\tSEGMENT __real@8@400ff120000000000000 DQ 040fe240000000000r ; 123456 CONST\tENDS ;\tCOMDAT _main _TEXT\tSEGMENT _main\tPROC NEAR\t\t\t\t\t; COMDAT ; File C:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp ; Line 4 \tpush\tebp \tmov\tebp, esp \tsub\tesp, 72\t\t\t\t\t; 00000048H \tpush\tebx \tpush\tesi \tpush\tedi \tlea\tedi, DWORD PTR [ebp-72] \tmov\tecx, 18\t\t\t\t\t; 00000012H \tmov\teax, -858993460\t\t\t\t; ccccccccH \trep stosd ; Line 5 \tpush\t1074266112\t\t\t\t; 40080000H \tpush\t0 \tpush\t1076101120\t\t\t\t; 40240000H \tpush\t0 \tcall\t_pow \tadd\tesp, 16\t\t\t\t\t; 00000010H \tfdivr\tQWORD PTR __real@8@400ff120000000000000 \tfstp\tQWORD PTR -8+[ebp] \tpush\t1074266112\t\t\t\t; 40080000H \tpush\t0 \tpush\t1076101120\t\t\t\t; 40240000H \tpush\t0 \tcall\t_pow \tadd\tesp, 16\t\t\t\t\t; 00000010H \tfdivr\tQWORD PTR __real@8@400ff120000000000000 \tfld\tQWORD PTR -8+[ebp] \tfcompp ; Line 7 \tpop\tedi \tpop\tesi \tpop\tebx \tadd\tesp, 72\t\t\t\t\t; 00000048H \tcmp\tebp, esp \tcall\t__chkesp \tmov\tesp, ebp \tpop\tebp \tret\t0 _main\tENDP _TEXT\tENDS END
-drl
|
Post #73,013
1/6/03 4:54:50 PM
1/6/03 4:57:34 PM
|
Trimming it down...
Just wondering whether it printed the "hello" - i.e. did the equality test as true or false? (Note: see [link|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_.2f.op.asp|/Op Option] for a description of the settings for VC6). \nSTEPA:\n push 1074266112 -- 3.0\n push 0\n push 1076101120 -- 10.0\n push 0\n -- cpu stack should look something like\n -- 12(esp) 3.0\n -- 8(esp) 0\n -- 4(esp) 10.0\n -- 0(esp) 0\n call _pow -- pow(10.0, 3.0)\n -- result left in FPU ST(0)\n add esp, 16 -- reclaim cpu stack space\n fdivr QWORD PTR __real@8@400ff120000000000000 -- 123456.0 / pow(10.0, 3.0) \n fstp QWORD PTR -8+[ebp] -- store result in local variable\n -- not sure if this rounds to 64 bits\n -- QWORD is quad-word - 8 bytes in length\n\nSTEPB:\n push 1074266112 -- 3.0\n push 0\n push 1076101120 -- 10.0\n push 0\n -- cpu stack should look something like\n -- 12(esp) 3.0\n -- 8(esp) 0\n -- 4(esp) 10.0\n -- 0(esp) 0\n call _pow -- pow(10.0, 3.0)\n add esp, 16 -- reclaim cpu stack space \n fdivr QWORD PTR __real@8@400ff120000000000000 -- 123456.0 / pow(10.0, 3.0)\n\n fld QWORD PTR -8+[ebp] -- load STEPA result into fpu ST(0)\n -- ST(0) = STEPA result\n -- ST(1) = STEPB result\n fcompp -- compare ST(0) and ST(1)
Edited by ChrisR
Jan. 6, 2003, 04:57:34 PM EST
|
Post #73,015
1/6/03 4:57:55 PM
|
Re: Trimming it down...
Yes, it did the braces.
/Od BTW (no opt).
-drl
|
Post #73,025
1/6/03 6:07:55 PM
|
Scratches head...
Kind of goes against my theory. :-(
From looking at the ASM again, it doesn't look like you put any instructions within the conditional brackets. The ASM does an float compare but it doesn't actually use the result for any branch or jump. Could you try it with a simple print within the conditionals?
|
Post #73,062
1/6/03 8:51:33 PM
|
Re: Scratches head...
Oh sure. It won't really be essentially different, but here goes:
\tTITLE\tC:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp \t.386P include listing.inc if @Version gt 510 .model FLAT else _TEXT\tSEGMENT PARA USE32 PUBLIC 'CODE' _TEXT\tENDS _DATA\tSEGMENT DWORD USE32 PUBLIC 'DATA' _DATA\tENDS CONST\tSEGMENT DWORD USE32 PUBLIC 'CONST' CONST\tENDS _BSS\tSEGMENT DWORD USE32 PUBLIC 'BSS' _BSS\tENDS $$SYMBOLS\tSEGMENT BYTE USE32 'DEBSYM' $$SYMBOLS\tENDS $$TYPES\tSEGMENT BYTE USE32 'DEBTYP' $$TYPES\tENDS _TLS\tSEGMENT DWORD USE32 PUBLIC 'TLS' _TLS\tENDS ;\tCOMDAT ??_C@_02ELOP@42?$AA@ CONST\tSEGMENT DWORD USE32 PUBLIC 'CONST' CONST\tENDS ;\tCOMDAT _main _TEXT\tSEGMENT PARA USE32 PUBLIC 'CODE' _TEXT\tENDS FLAT\tGROUP _DATA, CONST, _BSS \tASSUME\tCS: FLAT, DS: FLAT, SS: FLAT endif PUBLIC\t_main PUBLIC\t??_C@_02ELOP@42?$AA@\t\t\t\t; `string' PUBLIC\t__real@8@400ff120000000000000 EXTRN\t_pow:NEAR EXTRN\t_puts:NEAR EXTRN\t__chkesp:NEAR EXTRN\t__fltused:NEAR ;\tCOMDAT ??_C@_02ELOP@42?$AA@ ; File C:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp CONST\tSEGMENT ??_C@_02ELOP@42?$AA@ DB '42', 00H\t\t\t; `string' CONST\tENDS ;\tCOMDAT __real@8@400ff120000000000000 CONST\tSEGMENT __real@8@400ff120000000000000 DQ 040fe240000000000r ; 123456 CONST\tENDS ;\tCOMDAT _main _TEXT\tSEGMENT _main\tPROC NEAR\t\t\t\t\t; COMDAT ; File C:\\My Documents\\Visual Studio Projects\\Junk1\\Junk.cpp ; Line 5 \tpush\tebp \tmov\tebp, esp \tsub\tesp, 72\t\t\t\t\t; 00000048H \tpush\tebx \tpush\tesi \tpush\tedi \tlea\tedi, DWORD PTR [ebp-72] \tmov\tecx, 18\t\t\t\t\t; 00000012H \tmov\teax, -858993460\t\t\t\t; ccccccccH \trep stosd ; Line 6 \tpush\t1074266112\t\t\t\t; 40080000H \tpush\t0 \tpush\t1076101120\t\t\t\t; 40240000H \tpush\t0 \tcall\t_pow \tadd\tesp, 16\t\t\t\t\t; 00000010H \tfdivr\tQWORD PTR __real@8@400ff120000000000000 \tfstp\tQWORD PTR -8+[ebp] \tpush\t1074266112\t\t\t\t; 40080000H \tpush\t0 \tpush\t1076101120\t\t\t\t; 40240000H \tpush\t0 \tcall\t_pow \tadd\tesp, 16\t\t\t\t\t; 00000010H \tfdivr\tQWORD PTR __real@8@400ff120000000000000 \tfcomp\tQWORD PTR -8+[ebp] \tfnstsw\tax \ttest\tah, 64\t\t\t\t\t; 00000040H \tje\tSHORT $L928 \tpush\tOFFSET FLAT:??_C@_02ELOP@42?$AA@\t; `string' \tcall\t_puts \tadd\tesp, 4 $L928: ; Line 8 \tpop\tedi \tpop\tesi \tpop\tebx \tadd\tesp, 72\t\t\t\t\t; 00000048H \tcmp\tebp, esp \tcall\t__chkesp \tmov\tesp, ebp \tpop\tebp \tret\t0 _main\tENDP _TEXT\tENDS END
-drl
|
Post #73,070
1/6/03 9:27:16 PM
|
Thanks...
...I was just wanting to see the instructions that immediately followed the float compare. In this case it was:
fnstsw ax test ah, 64 je SHORT $L928
Which is strange compared to my experience with the MC68881, where there are direct floating point branch instructions (at least that's the way I remember it).
|
Post #73,071
1/6/03 9:29:58 PM
|
BTW
Did you figure out what I put between the brackets? :)
-drl
|
Post #73,091
1/6/03 10:10:48 PM
|
Hmmmm
Well, I see the instructions: push OFFSET FLAT:??_C@_02ELOP@42?$AA@ ; `string'\ncall _puts And I know that _puts is most likely the printf function, but I can't really decode the constant that's pushed on the stack there. The assembler comment 'string is pretty useless - yes I know it's a string - tell me something I didn't know. But I can't make out the rest of the encryption (something with ELOP in it). :-)
|
Post #73,096
1/6/03 10:21:20 PM
|
puts("42");
-drl
|