调用约定是指函数将参数传递给被调用函数并从中接收返回值的方式。
没有通过__attribute __((fastcall))通过寄存器将函数参数从asm传递到C
我试图从汇编程序调用C函数,但我没有按预期传递值(参数)。 fastcall属性从gcc生成警告并被忽略!我正在使用MASM风格......
我编写了函数'A',它将调用许多其他函数之一。为了保存重写函数'A',我想传递函数作为函数'A'的参数调用。例如: ...
64位C ++传递具有“不同”调用约定作为参数的函数会产生不明确的错误
我的目标是使用__cdecl和__stdcall调用约定轻松地提取任意函数的原型。它在32位工作正常。唯一改变的是呼唤......
根据我在调用Windows函数时可以找到的文档,以下内容适用: - Windows上遵循Microsoft x64调用约定[12] [13]并预启动UEFI(对于x86 -...上的长模式)。
我正在读这本书:“计算机系统 - 程序员的视角”。我发现,在x86-64架构上,我们只限于6个积分参数,这些参数将传递给...
为什么Windows x64调用约定不使用XMM寄存器传递超过4个整数args?
(Microsoft)x64调用约定规定:参数在寄存器RCX,RDX,R8和R9中传递。如果参数是float / double,则它们在XMM0L,XMM1L,XMM2L和XMM3L中传递。 ...
我做了这个代码:global strlen; int strlen(const char * string); strlen:xor rcx,rcx retry:cmp byte [rdi + rcx],0 je result inc rcx jmp retry ...
将参数传递给函数时,我总是假设逐个传递参数与传递它们包装在数组或结构或元组中没有什么不同。但是,一个简单的实验......
如何在数字参数之前找到用于调用命令的通用参数的数量。例如,如何在以下(错误)函数中区分arg1和arg2?...
这是我的第一个问题,因为我找不到任何与此主题相关的内容。最近,在为我的C游戏引擎项目制作课程时,我发现了一些有趣的东西:struct Stack * S1 = ...
x86-64 System V ABI(用于除Windows之外的所有内容)过去常常访问http://x86-64.org/documentation/abi.pdf,但该网站现已脱离互联网。有一个新的权威家园......
CPU寄存器中返回的用户定义类型的C ++对象。实例方法如何工作?
我知道当我调用实例方法时,对象地址被分配给'this'隐藏指针参数。通过这种方式,该方法可以访问当前对象的实例变量,不像...
来自CS的Windows x64上的不同asm:APP x86-64用于交换long的Linux示例函数
我正在阅读CS:APP第3版(第3章。图3.7 GAS汇编代码)长期交换(长* xp,长y){long x = * xp; * xp = y;返回x; } exchange:movq(%rdi),%r ax movq%rsi,(%rdi)...
将float作为第一个参数传递给函数时,%xmm0寄存器被设置。如果我们想要将整数作为函数中的第二个参数传递,该怎么办? %rdi或%rsi中的哪一个获得...
在某些情况下,我们使用标签来区分功能。标记通常是一个空结构:struct Tag {};假设我有一个使用这个标签的函数:void func(Tag,int a); ...
我正在做一个家庭作业,我们正在创建一个用于程序的类,用于单独或全部计算一次进行基本数学计算。所以补充一下......
我有一个C ++类MyClass声明一个公共枚举类型MyEnum,我想在C文件中使用该枚举。我怎样才能做到这一点 ?我试图在C ++文件中声明我的函数,然后把所有东西都放进去......
根据维基百科x86调用约定,它表示对于Microsoft x64调用约定:寄存器RBX,RBP,RDI,RSI,RSP,R12,R13,R14和R15被认为是非易失性的(callee -...
从MIPS过程返回地址或值数组的标准方法是什么?例如,假设我想读一个句子并想要返回该句中的单词。要么, ...
我是程序集的新手,试图理解以下函数的objdump:int nothing(int num){return num;这是结果(linux,x86-64,gcc 8):push rbp mov rbp,rsp ...