腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
(9999+)
视频
沙龙
1
回答
x64
上的
调用
约定
compiler-construction
、
64-bit
、
x86-64
、
calling-convention
我在几个地方看到,微软针对
x64
平台的
调用
约定
被缩小到只有一个:
调用
者清除堆栈(cdecl),参数是在堆栈和寄存器的组合中传递的(我不会在这里讨论确切的细节)。我假设如果这是操作系统的
调用
约定
,那么可能所有其他针对Windows的编译器(例如mingw-w64)也遵循它。 这种
调用
约定
在其他主要平台(
x64
、
Linux
等)上也是正确的吗?或者
Linux
仍然使用多个
调用
约定<
浏览 4
提问于2013-08-09
得票数 8
回答已采纳
1
回答
对于
x64
微软注册表,gcc/g++有
调用
约定
吗?
gcc
、
assembly
、
64-bit
、
calling-convention
我有几个x86和
x64
库,其中许多是汇编代码,或者没有源代码,它们是为x86上的__cdecl堆栈
约定
和微软在amd64上的
x64
调用
约定
(RCX、RDX、R8、R9)构建的。但是,默认情况下,
Linux
上的
x64
使用不同的
x64
调用
约定
(RDI、RSI、RDX、RCX、R8、R9)。我似乎找不到如何告诉gcc/g++使用微软使用的备用
x64
调用
约定
?似
浏览 4
提问于2016-01-28
得票数 3
1
回答
“`int 0x80”后面的呼叫
约定
是什么?
linux
、
kernel
、
assembly
、
conventions
我知道有一个syscall
约定
,但是在
调用
int 80而不是syscall时,
调用
它之前的
调用
约定
是什么?to writeint 0x80 ; call kernel 我读过这里,rdx之后的参数是esi、edi、ebp (或
x64
rsi、rdi、rbp),我没有在维基百科
调用
约定
的页面中看到它,但是int80h似乎表明Windows也使用了这个
约定
?这个<
浏览 0
提问于2018-05-30
得票数 3
回答已采纳
1
回答
amd64与Intel x86-64栈帧的区别
assembly
、
x86-64
、
calling-convention
、
function-call
我正在学习asm,所以我也在阅读
Linux
amd64 ABI,我注意到计算机系统:程序员的视角(CSAPP)有相同的内容(堆栈帧布局)。我发现栈帧布局是不同的,它们的返回地址被划分为不同的位置。假设过程P用n个整数参数
调用
过程q,使得n> 6。那么P的代码必须为参数7到n分配足够存储空间的堆栈帧。 没有办法通信,我不太明白为什么会有区别。也许我找错文件了。我认为CSAPP是在
Linux
环境中,所以我应该阅读
Linux
,但是官方文档提供的体系结构列表不包含英特尔x86_64,所以我假设英特尔x86_x64是IA
浏览 3
提问于2022-06-16
得票数 -1
2
回答
将C地址作为不带原型的函数
调用
c
、
assembly
、
64-bit
我需要在C中
调用
一个函数,只需要知道它的地址,而没有关于它原型的信息(我不能将它强制转换为C函数指针)。问题出在
x64
约定
(目前是
Linux
one ),其中参数通过寄存器传递。builtin_apply相同的原型的函数是: void *call_ptr(void (*fun)(), void *params, s
浏览 4
提问于2013-08-25
得票数 5
1
回答
在
Linux
x64
上
调用
“this”参数的
约定
c++
、
linux
、
calling-convention
、
abi
我有一个场景,我需要在
Linux
x64
上
调用
LLDB的函数(但可能是任何
x64
),它来自用不同语言编写的应用程序。因此,我需要正确理解
调用
约定
和参数是如何传递的。我试图
调用
SBDebugger::GetCommandInterpreter,定义为:完整的头文件可以在这里找到然而,当以这种方式
调用
函数时,我会得到一个分段错误。SBDebugge
浏览 9
提问于2022-07-15
得票数 1
回答已采纳
1
回答
编写Microsoft Fastcall 64位汇编函数
assembly
、
x86
、
disassembly
、
calling-convention
我在通过外壳代码编写64位fastcall函数时遇到了一些问题,问题是它似乎与在它之前和之后被
调用
的其他函数打乱了关系,尽管它可以工作,但在几次之后,我传递的参数由于某种原因最终变成了垃圾,而不是我传递给它的参数,这让我认为我可能曲解了
调用
约定
的工作方式。例如,我在
调用
print2之前
调用
printf,这是我使用的参数中的2个,这是在第一次运行后它们发生的情况: function附注:我使用std
浏览 5
提问于2021-02-27
得票数 1
1
回答
导入函数所需的stdcall?
delphi
、
delphi-7
我对此很好奇:或者我可以就这样逃脱在默认情况下,它将使用标准
调用
编辑 这个问题与32位库有关,Arnaud提出了一个很好的观点,对于64位,
调用
约定
没有被考虑,因为只有一个。
浏览 1
提问于2012-03-21
得票数 4
回答已采纳
1
回答
x64
上的COM
调用
约定
com
、
assembly
、
64-bit
、
calling-convention
关于COM在
x64
机器上的行为方式,我想得到一个明确的答案。在将
调用
分派到
x64
计算机上的COM接口时(假设COM实现是64位的),Windows是否使用正常的
x64
调用
约定
?这个程序集需要知道如何从
调用
它的人那里正确地获取参数。因此,我想知道COM是否使用标准的
x64
调用
约定
(几乎是快速
调用
)来设置对程序集的
调用
。
浏览 1
提问于2008-10-29
得票数 7
回答已采纳
2
回答
Gcc
x64
函数
调用
c++
、
gcc
、
64-bit
、
convention
、
abi
据我所知,
x64
代码有两种可能的
调用
约定
-- Microsoft
x64
和AMD64。在按照gcc惯例编译使用Microsoft
x64
时,是否有这样的严格规则(强制注册使用)?如果是,如何
浏览 5
提问于2011-10-26
得票数 1
回答已采纳
2
回答
使用64位arch中的寄存器访问参数
c
、
assembly
、
operating-system
我可以断定,在x86-32中,参数是在cdecl
调用
约定
中传递的,而不是x86-64,这是一种快速
调用
约定
。 为什么会发生这种情况?一直都是这样的吗?
浏览 0
提问于2014-01-24
得票数 0
1
回答
将C++ __fastcall钩子从x86移植到
x64
c++
、
visual-studio
、
visual-studio-2010
、
visual-c++
、
64-bit
)OriginalFunctionPointer); } // Using P1 here is fine on x86 b
浏览 1
提问于2011-06-29
得票数 1
回答已采纳
1
回答
C# COM字符串在C++ BSTR中损坏。
c#
、
c++
、
com
我编写了一个C# COM对象,我从我的本机C++代码中
调用
该对象。C# COM有一些功能和事件。我试过了我能想到的一切,然后到处看了看: // declaring
浏览 3
提问于2013-06-13
得票数 0
回答已采纳
3
回答
当使用PInvoke时,为什么使用__stdcall?
c++
、
pinvoke
、
calling-convention
、
function-declaration
、
stdcall
我一直在使用PInvoke让我的C#应用程序
调用
我编写的C++函数。请在回答时使用简单的英语。被
调用
者清理堆栈,因此编译器使vararg函数为__cdecl。 让我的大脑感觉好像有卷尾草在吹。
浏览 7
提问于2013-04-05
得票数 4
回答已采纳
2
回答
如何使用UEFI运行时服务?
c
、
uefi
、
gnu-efi
-j .reloc --target efi-app-x86_64 --subsystem=10 main.so main.efi uefi-run -b /usr/share/edk2-ovmf/
x64
浏览 8
提问于2020-12-12
得票数 1
回答已采纳
2
回答
__cdecl、__stdcall和__fastcall都是以完全相同的方式命名的吗?
c++
、
visual-c++
、
assembly
、
masm
、
calling-convention
我使用的是VisualMASM2010,并使用C++作为我的
x64
汇编程序。call sum add rsp, 20o retend 我这样做的原因是为了学习不同的
调用
约定
我将使用sum的
调用
约定
stdcall,并修改asm代码,使其以"stdcall“的方式
调用
sum。一旦我让它工作起来,我会让它,比如说,fastcall,然后在asm中以"fast
浏览 2
提问于2013-02-24
得票数 8
回答已采纳
1
回答
__cdecl
调用
约定
不适用于msvc
x64
c++
、
windows
、
visual-c++
、
calling-convention
只是对__cdecl
调用
约定
的一个测试。您可以看到参数是由push 2和push 1指令传递的,这是__cdecl
调用
约定
。那么,为什么即使我指定了
x64
中的堆栈没有传递参数,如果我想在
x64
环境中做同样的事情,我应该做什么。
浏览 1
提问于2019-04-10
得票数 2
回答已采纳
1
回答
从gcc2.9到5.3的不同装配说明
c
、
gcc
、
assembly
buff_2[1] = 'B'; int i = 1; return 0;现在,我想分析相关的组装代码:函数
调用
之前的程序集指令
浏览 1
提问于2016-05-11
得票数 2
回答已采纳
1
回答
CallingConvention在64位.NET应用程序中被忽略了吗?
c#
、
.net
、
pinvoke
、
calling-convention
我之所以这样问是因为在“传统”x86中,您必须指定
调用
方或被
调用
者清理堆栈变量的方式(以及函数本身如何使用特定的CPU寄存器等);但据我所知,
x64
只有一个
约定
,即__fastcall (尽管最近添加了那么,CLR只是继续使用__fastcall
x64
约定
进行封送函数
调用
,而不管您为CallingConvention属性设置了什么?
浏览 2
提问于2016-01-16
得票数 11
回答已采纳
2
回答
复制寄存器时程序集中的分割错误?
c
、
assembly
、
segmentation-fault
、
x86-64
、
calling-convention
我试图将以下C代码转换为程序集。下面是C代码: int x;} point; return p->x * p->x + p->y * p->y; 我的程序集代码如下: .cfi_startproc imull %edx, %edx imu
浏览 1
提问于2020-04-09
得票数 1
回答已采纳
点击加载更多
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
相关
资讯
如果调用约定不匹配,会发生什么?
通过调用约定解决一个常见问题
有关调用约定的历史–第三部分
Linux系统调用实例和功能速查
介绍Linux下的系统调用过程
热门
标签
更多标签
云服务器
即时通信 IM
ICP备案
对象存储
实时音视频
活动推荐
运营活动
广告
关闭
领券