Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
ARM 调用约定是否允许函数不将 LR 存储到堆栈中?
正如标题所示 我在理解 ARM 架构的调用约定时遇到问题 特别是 我仍然很难知道当你调用子程序时 LR 寄存器会发生什么 我认为 当您进入子程序时 处理 LR 寄存器的最明显 最安全的方法是将其存储到堆栈中 但该行为没有出现在文档中 因此我
Assembly
arm
standards
callingconvention
HasThis 和 ExplicitThis 调用约定
我遇到HasThis and ExplicitThis调用约定 NET框架参考源 https referencesource microsoft com mscorlib system reflection callingconventio
c
NET
Reflection
clr
callingconvention
为什么 printf 仍然可以在 RAX 小于 XMM 寄存器中 FP 参数数量的情况下工作?
我正在关注Linux 64系统中的 开始x64汇编编程 一书 我正在使用 NASM 和 gcc 在关于浮点运算的章节中 本书指定了以下用于添加 2 个浮点数的代码 在本书和其他在线资源中 我读到寄存器 RAX 根据调用约定指定要使用的 XM
Linux
Assembly
x8664
nasm
callingconvention
RISC-V 调用约定的 ABI 寄存器名称
我对 RISC V ABI 寄存器名称感到困惑 例如 第 85 页的 RISC V 指令集手册 第一卷 用户级 ISA 版本 2 0 中的表 18 2 指定堆栈指针sp正在注册x14 然而 指令 addi sp zero 0 由 riscv
cpuregisters
callingconvention
ABI
RISCV
当他们说“参数以相反的顺序推动”时,这是什么意思?
In the cdecl调用约定 它指出 Arguments are pushed in the reverse order right to left 我的问题是 逆序相对于什么非逆序 与功能文档相关吗 例如 如果我有以下函数文档 voi
Assembly
x86
callingconvention
rdi 寄存器用于无参数函数的目的
考虑这个简单的函数 struct Foo int a int b int c int d int e int f Foo foo Foo f f a 1 f b 2 f c 3 f d 4 f e 5 f f 6 return f 它生成以
c
Assembly
x8664
callingconvention
ABI
printf 上的分段错误 - NASM 64 位 Linux
我尝试使用输入四个浮点数scanf 将它们存储到堆栈中 然后使用vmovupd将它们复制到寄存器以供使用 我的问题是 当我尝试输出这 4 个数字时 程序段错误位于printf 我认为这是堆栈的问题 但我尝试多次弹出 一次多条指令 但无济于事
Linux
Assembly
x8664
nasm
callingconvention
为什么 x86-64 System V 调用约定在寄存器中传递参数而不是仅在堆栈中传递参数?
为什么 32 位 C 将所有函数参数直接压入堆栈 而 64 位 C 将前 6 个参数放入寄存器 其余参数压入堆栈 所以 32 位堆栈看起来像 arg2 arg1 return address old rbp 虽然 64 位堆栈看起来像 ar
gcc
Assembly
x8664
callingconvention
我可以通过编程方式推导出 C++ dll 使用的调用约定吗?
想象一下 您想要编写一个程序来测试 c dll 文件中的函数 您应该允许用户选择一个 dll 我们假设我们正在讨论 c dll 他应该能够获得 dll 导出的所有函数的列表 然后 用户应该能够从列表中选择一个函数名称 手动输入参数列表 参数
c
dll
Assembly
callingconvention
namedecoration
记住 x86-64 System V arg 寄存器顺序的最佳方法是什么?
我经常忘记系统调用中每个参数需要使用的寄存器 每次我忘记时我都会访问this https stackoverflow com questions 2535989 what are the calling conventions for un
Assembly
x8664
cpuregisters
callingconvention
ABI
为什么 x86-64 使用 IA-64 C++ ABI?
From x86 64 psABI https github com hjl tools x86 psABI wiki x86 64 psABI property pdf 9 1 C 对于 C ABI 我们将使用 IA 64 C ABI 并
c
x8664
callingconvention
ABI
designdecisions
在 x64 上,每个 PUSH 指令是否推送 8 字节的倍数?
在 x64 上 每个 PUSH 指令是否压入 8 字节的倍数 如果没有的话 推力有多大 另外 每个函数参数消耗多少堆栈空间 64 位模式下的 PUSH 操作数大小 压入堆栈的值的大小以及堆栈指针调整的量取决于 PUSH 指令的操作数大小 在
Assembly
x8664
callingconvention
ARM 上的 Windows RT 本机代码调用约定是什么?
我找不到任何有关 Visual Studio C 使用的 Windows RT on ARM 调用约定的文档 微软用的是ARM吗AAPCS http infocenter arm com help topic com arm doc ihi
c
WINAPI
windowsruntime
arm
callingconvention
__cdecl 调用约定不适用于 msvc x64
只是一个测试 cdecl调用约定 这是一个 cmake 项目 只有 1 个源文件 include
c
Windows
visualc
callingconvention
C++ lambda 函数的默认调用约定是什么?
下面的代码是用VC 2012编译的 void f1 void stdcall void f2 void cdecl void cdecl h1 void stdcall h2 int main f1 h1 error C2664 f2 h2
c
function
C11
Lambda
callingconvention
为什么我们必须在这里取消引用 stdout ?
我正在尝试打电话fputs str stdout 从装配 我为什么要push dword stdout 而不是仅仅push stdout 因为在 C 中我们不这样做fputs str stdout 为什么我们需要取消引用stdout在装配中
Assembly
x86
nasm
callingconvention
fputs
Linux 上的 x86 32 位汇编中的函数调用如何工作?
我正在从 Jonathan Bartlett 的 Programming from ground up 一书中学习 GNU 汇编 在讨论函数调用和堆栈的主题时 我无法理解它的工作原理 下面是书上写的内容 在执行函数之前 程序将函数的所有参数
Assembly
x86
gnuassembler
callingconvention
att
将 C# 委托的调用约定更改为 CDECL
我在使用DotNet1 1时C 也遇到过这个问题 问题是这样的 我有一个非托管 dll 它有一个接受函数指针 以及其他参数 的函数 当我在 C 代码中声明 DLLImport 时 我传递了一个委托 但是 C 中的代表有stdcall调用约定
c
Interop
pinvoke
callingconvention
x86_64 调用约定和堆栈帧
我试图理解 GCC 4 4 3 为 Ubuntu Linux 下运行的 x86 64 机器生成的可执行代码 特别是 我不明白代码如何跟踪堆栈帧 过去 在 32 位代码中 我习惯于在几乎每个函数中看到这个 序言 push ebp movl e
c
stack
x8664
callingconvention
Backtrace
x86-64 上的 C++:何时在寄存器中传递和返回结构/类?
假设 Linux 上的 x86 64 ABI 在 C 中的什么条件下 结构会传递给寄存器中的函数 还是传递给堆栈上的函数 在什么条件下它们会返回到寄存器中 答案会随着课程的变化而变化吗 如果有助于简化答案 您可以假设单个参数 返回值并且没有
c
Assembly
x8664
callingconvention
ABI
1
2
3
»