c - 在 cpu 模拟器中是调用外部函数所需的程序集
问题描述
在 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语言中,或者需要通过调用一个函数来通过汇编显式调用puts,该函数包含内联asm,该函数接受viardic参数,每个虚拟cpu寄存器的内容,然后在汇编中将它们复制到主机寄存器中,调用所需的函数,然后将主机寄存器复制回虚拟寄存器,然后返回
解决方案
推荐阅读
- javascript - 在我将它控制台出来并显示出来后,我的值在我的渲染中是未定义的
- locale - 使用 Logstash 从 Informix 连接 jdbc 时出错
- mysql - 将 html 存储在文件系统或数据库中
- python - 如何在没有重定向的情况下集成 Stripe 支付 - Django
- sql - 如何在两个时间戳之间找到一天中特定时间段的出现?
- jenkins - 构建名称设置器插件 Jenkins
- r - 简单问题:如何使用 tidyr::contains 充当 AND 语句而不是 OR 语句?
- acumatica - Acumatica:销售订单不显示来自 BAccountExt 的扩展
- javascript - 下载 Cloud Functions 源代码时应该有 Javascript 文件吗?
- reactjs - 如何将所有 React 事件与 Material-UI 组件一起使用?