问题标签 [calling-convention]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - c中的调用约定
有人请告诉我如何更改c中的默认调用约定?
c - 自定义 X86_64 调用约定到 C 函数调用
我必须做一个接口(比如,一个包装器),它允许使用他的调用约定从 X86_64 汇编代码调用 C 函数,以及其他调用约定。最好的事情是非常“独立于编译器”(只是修改包装器),所以我正在寻找将寄存器/堆栈的东西放在编译器上的东西。我已经看过这里:P/Invoke 和 C# 的自定义调用约定,它与我要做的很接近。目前,我正在使用 GCC,但欢迎来自其他编译器的提示!
所以,这就是问题的最佳视图(自定义编码约定很奇怪):
我需要能够调用“特殊”(包装器)C 函数;这里的工作将是在其他 C 函数之间调度调用。所以这个包装器需要找到 %r11,保存所有寄存器并准备堆栈以供进一步调用。在 C 中是否有适当的方法来执行此操作(使用一些内联 asm)?
非常感谢
c - C 编译器如何实现返回大型结构的函数?
函数的返回值通常存储在堆栈或寄存器中。但是对于大型结构,它必须在堆栈上。这段代码在真正的编译器中必须进行多少复制?还是优化了?
例如:
(假设函数不能内联..)
c++ - fastcall真的更快吗?
fastcall 调用约定真的比 cdecl 等其他调用约定快吗?是否有任何基准可以显示调用约定如何影响性能?
c++ - 将函数的当前状态传递给 C/C++ 中的另一个函数
有没有办法将函数的当前状态传递给 C/C++ 中的另一个函数?我的意思是当前状态的所有参数和局部变量。例如:
funcB()
如果需要某种功能,则代码状态不佳。但能实现吗?
如果有人开始重构具有多个参数的长方法,这会有所帮助。
c++ - 我可以以编程方式推断 C++ dll 使用的调用约定吗?
想象一下,您想编写一个程序来测试 c++ dll 文件中的函数。您应该允许用户选择一个 dll(我们假设我们谈论的是 c++ dll)。他应该能够获得 dll 导出的所有函数的列表。然后,用户应该能够从列表中选择一个函数名称,手动输入参数列表(参数都是基本类型,如 int、double、bool 或 char 数组(例如 c 类型字符串))并尝试使用指定的参数运行选定的函数。他想知道函数是否使用指定的参数运行,或者它们是否会导致它崩溃(例如,因为它们与签名不匹配)。
主要问题是 C++ 作为一种强类型语言,要求您在编译时知道函数调用的参数的数量和类型。就我而言,我根本不知道这些参数是什么,直到用户在运行时选择它们。
我想出的唯一解决方案是使用程序集手动将参数推送到调用堆栈上。
但是,我已经明白,如果我想弄乱汇编,我最好确保我知道 dll 中的函数使用哪个调用约定。
所以(最后:)这是我的问题:我可以以编程方式推断调用约定吗?Dependency Walker 对我没有帮助,而且我不知道如何手动读取 PE 格式。
c++ - 什么是自定义调用约定?
这些是什么?作为开发人员,我如何受到这些影响?
iphone - 关于 ARM 上的 Objective C 调用约定和参数传递的问题
我想知道当我调用像这样的目标 C 方法时,目标 C 运行时如何处理参数
这个目标 C 调用有三个参数,与 ARM 系统上的典型方式相比,它是如何工作的。我知道寄存器 r0, r1, r2, r3 将保存前 4 个参数,那么还有其他参数怎么样?它如何将它们放在堆栈上并稍后弹出它们?
c++ - nasm/yasm 参数,与 C++ 的链接
我有一个关于 nasm 及其与 C++ 的联系的问题。我将一个小测试函数声明为
extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );
我这样称呼它:
该方法仅用于调试程序集并查看堆栈指针如何用于获取参数。除此之外,指针参数值应设置为 7,以了解其工作原理。这是这样实现的:
并通过编译
,然后链接到 c++ 应用程序。在调试模式下,一切正常。该函数被调用了几次并按预期工作,而在发布模式下该函数工作一次,但随后的程序操作失败。在我看来,近/远的堆栈/帧指针有问题,但我对这个主题很陌生,需要一点帮助。提前致谢!一个。
linux - i386 和 x86-64 上 UNIX 和 Linux 系统调用(和用户空间函数)的调用约定是什么
以下链接解释了 UNIX(BSD 风格)和 Linux 的 x86-32 系统调用约定:
但是 UNIX 和 Linux 上的 x86-64 系统调用约定是什么?