MIPS 编译器中的寄存器使用哪个?
我目前正在写一个玩具编译器作为作业,针对MIPS架构。 从高级语言转换时通常有 18 个可用寄存器:s0 到 s7(由被调用者保存),以及 t0 到 t9 是调用…
无法解析的外部符号 - 来自 C++ 的 LNK2019动态链接库
我使用 GetProcAddress 从 C++ dll 加载 GetInstance 函数到我的基本代码并得到 一些未解决的外部符号错误: 错误LNK2019:无法解析的外部符号“_decl…
CLR/Fastcall:大值类型如何在内部传递给被调用函数?
只是出于好奇:值类型通常是复制的,并且 JIT 编译器在调用方法时似乎使用 Microsoft 的 Fastcall 调用约定。这会将前几个参数放入寄存器中,以便快速…
导出函数(VS2008)的默认调用约定是什么?
假设以下 C++ 代码在函数声明中没有提及调用约定,那么导出函数 Exported 的调用约定是什么?我的猜测是 cdecl 的默认值。 extern "C" { __declspec (…
对于少于四个参数的函数是否需要保留堆栈空间?
刚刚开始学习 x64 汇编,我有一个关于函数、参数和堆栈的问题。据我了解,函数中的前四个参数在 Windows 中传递给 rcx、rdx、r8 和 r9 寄存器(以及用…
为什么我可以通过带有太多参数的指针调用函数?
假设我有这个函数: int func2() { printf("func2\n"); return 0; } 现在我声明一个指针: int (*fp)(double); 它应该指向一个接受 double 参数并返回…
__stdcall 名称修饰的语法是什么?
我有一个程序调用一组函数,如下所示: int _stdcall VB_Create(char*); int _stdcall VB_Open(unsigned int, unsigned int, unsigned int, unsigned …
C 如何返回结构体?
(gdb) disas func Dump of assembler code for function func: 0x00000000004004b8 : push %rbp 0x00000000004004b9 : mov %rsp,%rbp 0x0000000000400…
Windows 上的 __cdecl 或 __stdcall?
我目前正在为 Windows 开发一个 C++ 库,它将作为 DLL 分发。我的目标是最大化二进制互操作性;更准确地说,我的 DLL 中的函数必须可以从使用多个版本…