在cpu模拟器中,需要使用汇编程序来调用外部函数并在其中存储返回代码,或者可以使用例如使用gnu gas 64位汇编程序对模拟器进行编码的语言来实现:
.file "hello_world.c"
.text
.section .rodata
.LC0:
.string "hello world"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
leaq .LC0(%rip), %rdi
call puts@PLT
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 7.3.0-16ubuntu3) 7.3.0"
.section .note.GNU-stack,"",@progbits
一个电话可以说吗
rax = puts(/* register arguments 1 to 6 in order, plus stack arguments if any */);
C中的,或者需要通过汇编来通过调用一个包含内联汇编代码的函数,该函数包含内联汇编代码,该内联汇编代码带有viardic参数以及每个虚拟cpu寄存器的内容,然后在汇编中将其复制到主机中注册自己,调用所需的功能,然后将主机寄存器复制回虚拟寄存器,然后返回