Task

Show how a foreign language function can be called from the language.



As an example, consider calling functions defined in the C language. Create a string containing "Hello World!" of the string type typical to the language. Pass the string content to C's strdup. The content can be copied if necessary. Get the result from strdup and print it using language means. Do not forget to free the result of strdup (allocated in the heap).



Notes

 It is not mandated if the C run-time library is to be loaded statically or dynamically. You are free to use either way.
 C++ and C solutions can take some other language to communicate with.
 It is not mandatory to use strdup, especially if the foreign function interface being demonstrated makes that uninformative.


See also

   Use another language to call a function


 
option casemap:none
 
strdup  proto :qword
printf  proto :qword, :vararg
exit    proto :dword
 
.data
bstr    db "String 1",0
 
.data?
buff    dq ?
 
.code
main proc
  invoke printf, CSTR("Copying %s to buff with strdup using invoke....",10), addr bstr
  invoke strdup, addr bstr
  mov buff, rax
  invoke printf, CSTR("buff now = %s",10), buff
  invoke exit, 0
  ret
main endp
end
;Now, we could target a specific ABI by assigning the call values to the registers like
;.code
;main proc
;  lea rdi, bstr
;  call strdup
;  mov buff, rax
;main endp
;end
 