; Program that demonstrates INVOKE with ADDR of string .386 .MODEL FLAT ; Procedure prototypes: print_str PROTO NEAR32 C, pstr:PTR BYTE ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE IO.H ; header file for input/output .DATA str1 BYTE "This is a string", 0 .CODE ; start of main program code _start: INVOKE print_str, ADDR str1 INVOKE ExitProcess, 0 ; exit with return code 0 PUBLIC _start ; make entry point public print_str PROC NEAR32 C, arg1:PTR BYTE mov eax, arg1 output [eax] ; display string ret print_str ENDP END ; end of source code ; DUMPBIN disassembly: ; ;_start: ; 0040104C: 68 00 40 40 00 push 404000h ; ASCII "This is a string" ; 00401051: E8 0A 00 00 00 call _print_str ; 00401056: 83 C4 04 add esp,4 ; 00401059: 6A 00 push 0 ; 0040105B: E8 8E 03 00 00 call _ExitProcess@4 ;_print_str: ; 00401060: 55 push ebp ; 00401061: 8B EC mov ebp,esp ; 00401063: 8B 45 08 mov eax,dword ptr [ebp+8] ; output [eax] ; 00401066: 50 push eax ; 00401067: 8D 00 lea eax,[eax] ; 00401069: 50 push eax ; 0040106A: E8 AF FF FF FF call @ILT+25(outproc) (*) ; 0040106F: 58 pop eax ; 00401070: C9 leave ; 00401071: C3 ret ; ; (*) ; call @ILT+25(outproc) means that function outproc is located at slot 25 in the Incremental Link Table. ;