EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

Test t7613: Compile DLL 64bit Win linking DLL 64bit Win


Description
Test creates 64bit proxy DLL file t7613.dll with exports forwarded to another library t7613F.dll.
See also
LinkerCombinations  
Tested procedures
PfdllCompile   PfdllLoadPgm  
Source & expected listing t7613.htm.lst
| | EUROASM DEBUG=OFF,PROFILE=OFF,AUTOSEGMENT=ON,LIST=ON, \ | | DUMP=ON,DUMPWIDTH=25,DUMPALL=OFF,CPU=X64,AMD=YES | |;; | |t7613F PROGRAM FORMAT=DLL,MODEL=FLAT,WIDTH=64, \ | | ICONFILE=,LISTMAP=ON,LISTGLOBALS=ON | | EXPORT WriteW64, BeepW64, ExitW64 |[.text] ::::Section changed. |00000000: |WriteW64: PROC ; Write ASCIIZ string DS:RSI in 64bit Windows. | | IMPORT GetStdHandle:,WriteFile: ; Use imported Windows kernel functions. |00000000:4889E5 | MOV RBP,RSP ; Save (perhaps unaligned) stack pointer. |00000003:4883E4F0 | AND RSP,-16 ; OWORD alignment downwards. |00000007:4883EC30 | SUB RSP,5*8+8 ; Allocate shadow space on stack for max 5 arguments. |0000000B:48C7C1F5FFFFFF| MOV RCX,-11 ; %1 Identifier of standard output STD_OUTPUT_HANDLE. |00000012:E8(00000000) | CALL GetStdHandle: ; Fastcall the imported Windows function with 1 argument. |00000017:4889C3 | MOV RBX,RAX ; Temporary save the returned StdOutput handle to RBX. |0000001A:4889F7 | MOV RDI,RSI ; Use RDI to find the end of input string. |0000001D:4831C9 | XOR RCX,RCX ; Use RCX to keep the size of input string. |00000020:4831C0 | XOR RAX,RAX ; Zero AL, the searched terminating character. |00000023:48F7D1 | NOT RCX ; Assume unlimited possible string size. |00000026:F2AE | REPNE SCASB ; Find the zero terminator. |00000028:48F7D1 | NOT RCX ; Get string size to RCX. |0000002B:89442420 | MOV [RSP+20h],EAX ; %5 Overlapped I/O is not used. |0000002F:4C8D4C2418 | LEA R9,[RSP+18h] ; %4 Local variable for the number of written bytes uses shadowed R9. |00000034:4989C8 | MOV R8,RCX ; %3 String size. |00000037:4889F2 | MOV RDX,RSI ; %2 String address. |0000003A:4889D9 | MOV RCX,RBX ; %1 Standard output file handle. |0000003D:E8(00000000) | CALL WriteFile: ; Fastcall the imported function with 5 arguments. |00000042:4889EC | MOV RSP,RBP ; Restore the stack. |00000045:C3 | RET ; Return to caller. |00000046: | ENDPROC WriteW64: |00000046: |BeepW64: PROC ; Play a sound in 64bit Windows. | | IMPORT Beep: ; Use imported Windows kernel function. |00000046:4889E5 | MOV RBP,RSP ; Save (perhaps unaligned) stack pointer. |00000049:4883E4F0 | AND RSP,-16 ; OWORD alignment downwards. |0000004D:4883EC28 | SUB RSP,4*8+8 ; Allocate shadow space on stack. |00000051:BAC8000000 | MOV RDX,200 ; %2 Sound duration [ms]. |00000056:B9B8010000 | MOV RCX,440 ; %1 Sound frequency [Hz]. |0000005B:E8(00000000) | CALL Beep: ; Fastcall the imported function with 2 arguments. |00000060:BA90010000 | MOV RDX,400 ; %2 Sound duration [ms]. |00000065:B94B020000 | MOV RCX,587 ; %1 Sound frequency [Hz]. |0000006A:E8(00000000) | CALL Beep: ; Fastcall the imported function with 2 arguments. |0000006F:4889EC | MOV RSP,RBP ; Restore the stack. |00000072:C3 | RET ; Return to caller. |00000073: | ENDPROC BeepW64: |00000073: |ExitW64: PROC ; Terminate program in 64bit Windows. | | IMPORT ExitProcess ; Use imported Windows kernel function. |00000073:4883E4F0 | AND RSP,-16 ; OWORD alignment downwards. |00000077:4883EC28 | SUB RSP,4*8+8 ; Allocate shadow space on stack. |0000007B:4829C9 | SUB RCX,RCX ; %1 Terminate with errorlevel 0. |0000007E:E9(00000000) | JMP ExitProcess: ; Use imported function with 1 argument. No return. |00000083: | ENDPROC ExitW64: | |ENDPROGRAM t7613F | **** ListMap "t7613F.dll",groups=0,segments=4,entry=,stack= | [.text],VA=10001000h,size=00000083h=131,width=64,align=1000h,purpose=CODE | [.idata],VA=10002000h,size=000000D3h=211,width=64,align=8,purpose=IMPORT+IAT | [.edata],VA=10003000h,size=0000006Ah=106,width=0,align=8,purpose=EXPORT | [.reloc],VA=10004000h,size=00000010h=16,width=32,align=4,purpose=BASERELOC | **** ListGlobals "t7613F.dll",Global=0,Public=0,Extern=0,eXport=3,Import=4 | Beep,[.idata]:000000C5h,VA=100020C5h,scope='I',lib="kernel32.dll" | BeepW64,[.text]:00000046h,VA=10001046h,scope='X' | ExitProcess,[.idata]:000000CCh,VA=100020CCh,scope='I',lib="kernel32.dll" | ExitW64,[.text]:00000073h,VA=10001073h,scope='X' | GetStdHandle,[.idata]:000000B7h,VA=100020B7h,scope='I',lib="kernel32.dll" | WriteFile,[.idata]:000000BEh,VA=100020BEh,scope='I',lib="kernel32.dll" | WriteW64,[.text]:00000000h,VA=10001000h,scope='X' | |;; | |t7613 PROGRAM FORMAT=DLL,MODEL=FLAT,WIDTH=64, \ | | ICONFILE=,LISTMAP=ON,LISTGLOBALS=ON | | EXPORT Write.W64,LIB=t7613F.dll, FWD=WriteW64 | | EXPORT Beep.W64, LIB=t7613F.dll, FWD=BeepW64 | | EXPORT Exit.W64, LIB=t7613F.dll, FWD=ExitW64 | |ENDPROGRAM t7613 | **** ListMap "t7613.dll",groups=0,segments=1,entry=,stack= | [.edata],VA=10001000h,size=0000009Ah=154,width=0,align=8,purpose=EXPORT | **** ListGlobals "t7613.dll",Global=0,Public=0,Extern=0,eXport=3,Import=0 | Beep.W64,scope='X',lib="t7613F.dll",fwd=BeepW64 | Exit.W64,scope='X',lib="t7613F.dll",fwd=ExitW64 | Write.W64,scope='X',lib="t7613F.dll",fwd=WriteW64
Expected messages t7613.out
I0180 Assembling source file "t7613.htm". I0270 Assembling source "t7613". I0310 Assembling source pass 1. I0330 Assembling source pass 2 - final. I0470 Assembling program "t7613F". "t7613.htm"{62} I0510 Assembling program pass 1. "t7613.htm"{62} I0510 Assembling program pass 2. "t7613.htm"{62} I0530 Assembling program pass 3 - final. "t7613.htm"{62} I0660 64bit FLAT DLL file "t7613F.dll" created, size=2576. "t7613.htm"{110} I0650 Program "t7613F" assembled in 3 passes with errorlevel 0. "t7613.htm"{110} I0470 Assembling program "t7613". "t7613.htm"{125} I0510 Assembling program pass 1. "t7613.htm"{125} I0510 Assembling program pass 2. "t7613.htm"{125} I0530 Assembling program pass 3 - final. "t7613.htm"{125} I0660 64bit FLAT DLL file "t7613.dll" created, size=666. "t7613.htm"{130} I0650 Program "t7613" assembled in 3 passes with errorlevel 0. "t7613.htm"{130} I0750 Source "t7613" (207 lines) assembled in 2 passes with errorlevel 0. I0860 Listing file "t7613.htm.lst" created, size=6007. I0990 EuroAssembler terminated with errorlevel 0.
Expected output file t7613. dll
0000: 4D 5A 89 00 01 00 00 00 04 00 21 00 FF FF 05 00  MZ¤°·°°°·°!°¤¤·°
0010: 00 02 61 8A 00 00 00 00 40 00 00 00 00 00 00 00  °·a¤°°°°@°°°°°°°
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0030: 00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00  °°°°°°°°°°°°¤°°°
0040: 0E 1F BA 0E 00 B4 09 CD 21 B8 08 4C CD 21 54 68  ··¤·°¤·¤!¤·L¤!Th
0050: 69 73 20 70 72 6F 67 72 61 6D 20 77 61 73 20 6C  is¯program¯was¯l
0060: 61 75 6E 63 68 65 64 20 69 6E 20 44 4F 53 20 62  aunched¯in¯DOS¯b
0070: 75 74 20 69 74 20 72 65 71 75 69 72 65 73 20 57  ut¯it¯requires¯W
0080: 69 6E 64 6F 77 73 2E 24 00 00 00 00 00 00 00 00  indows.$°°°°°°°°
0090: 50 45 00 00 64 86 01 00 00 00 00 00 00 00 00 00  PE°°d¤·°°°°°°°°°
00A0: 00 00 00 00 F0 00 22 20 0B 02 01 00 00 00 00 00  °°°°¤°"¯···°°°°°
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
00C0: 00 00 00 10 00 00 00 00 00 10 00 00 00 02 00 00  °°°·°°°°°·°°°·°°
00D0: 04 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00  ·°°°·°°°·°°°°°°°
00E0: 00 20 00 00 C0 01 00 00 00 00 00 00 03 00 0F 00  °¯°°¤·°°°°°°·°·°
00F0: 00 00 10 00 00 00 00 00 00 10 00 00 00 00 00 00  °°·°°°°°°·°°°°°°
0100: 00 00 00 01 00 00 00 00 00 00 10 00 00 00 00 00  °°°·°°°°°°·°°°°°
0110: 00 00 00 00 10 00 00 00 00 10 00 00 9A 00 00 00  °°°°·°°°°·°°¤°°°
0120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0190: 00 00 00 00 00 00 00 00 2E 65 64 61 74 61 00 00  °°°°°°°°.edata°°
01A0: 00 10 00 00 00 10 00 00 9A 00 00 00 00 02 00 00  °·°°°·°°¤°°°°·°°
01B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 40  °°°°°°°°°°°°°°@@
01C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
01D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
01E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
01F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0200: 00 00 00 00 00 00 00 00 01 00 00 00 46 10 00 00  °°°°°°°°·°°°F·°°
0210: 01 00 00 00 03 00 00 00 03 00 00 00 28 10 00 00  ·°°°·°°°·°°°(·°°
0220: 34 10 00 00 40 10 00 00 6C 10 00 00 7B 10 00 00  4·°°@·°°l·°°{·°°
0230: 8A 10 00 00 50 10 00 00 59 10 00 00 62 10 00 00  ¤·°°P·°°Y·°°b·°°
0240: 00 00 01 00 02 00 74 37 36 31 33 2E 64 6C 6C 00  °°·°·°t7613.dll°
0250: 42 65 65 70 2E 57 36 34 00 45 78 69 74 2E 57 36  Beep.W64°Exit.W6
0260: 34 00 57 72 69 74 65 2E 57 36 34 00 74 37 36 31  4°Write.W64°t761
0270: 33 46 2E 42 65 65 70 57 36 34 00 74 37 36 31 33  3F.BeepW64°t7613
0280: 46 2E 45 78 69 74 57 36 34 00 74 37 36 31 33 46  F.ExitW64°t7613F
0290: 2E 57 72 69 74 65 57 36 34 00                    .WriteW64°

▲Back to the top▲