在cpu仿真器中需要调用外部函数的程序集

时间:2018-09-19 04:54:47

标签: c emulation virtualization cpu-registers

在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寄存器的内容,然后在汇编中将其复制到主机中注册自己,调用所需的功能,然后将主机寄存器复制回虚拟寄存器,然后返回

0 个答案:

没有答案