问题标签 [cdecl]
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 - 除了不能在任何程序中使用的变量名之外,还有哪些在 cdecl 中不允许使用的变量名?
我一直在玩cdecl,我注意到有些名称不允许作为标识符,尽管 GCC 可以完美地编译它们。
例如,如果我写
整数点;
或者
整数指针;
或者
整数数组;
cdecl 给出“语法错误”,但是当我在程序中使用它时,GCC 编译它们没有任何问题。所以,有些标识符在 cdecl 中是不允许的。
哪些标识符不能在 cdecl 中使用,但可以在程序中使用(即程序编译)?为什么他们不被允许?
io - 如何在带有 NASM 汇编器的 x86 中使用 Syscall 从 stdin/stdout 读取和写入字节?
我正在尝试从标准输入读取字符串并使用 x86、NASM 和系统调用将其打印出来。读入一个字节将是一个函数,而写出一个字节将是一个函数。我正在从标准输入读取字符串并将每个字符放入一个数组中。这是我最初的想法:
样本输入:
样本输出:
这些函数应该与 cdecl 一起使用,我认为我做得不对。我也意识到我没有将字符放入 arr。
assembly - 在 ASM x86 中实现 C++ 调用约定
我编写了一个使用 ASM x86 混淆字符串的简单程序。用户必须输入他们想要的字符串,然后Ekey
为要混淆的字符串选择一个键 ( )。(我知道您可以使用移位运算符或表格查找来模拟左右位旋转,我只是想让自己熟悉 ASM)
我正在尝试更改程序,以便它采用可接受的 C++ 标准调用过程,例如Cdecl
将参数 ( EKey
& tempChar
) 传递到子例程obfuscate
中。
尽管进行了数小时的研究,但我一直没有成功,所以我来到这里希望有更多经验的人能够提供一些指导。
这是相关的功能:
和obfuscate
子程序:
提前感谢您花时间阅读。
visual-studio-2012 - 混合 cdecl 和 stdcall 调用约定
我已经在 Windows VS2012 (.lib) 上构建了一个静态库,使用 stdcall 约定编译。当我说“已经构建”时,我的意思是不幸的是我无法使用我选择的调用约定来重建它。
是否可以从使用 cdecl 约定编译的代码中调用该库中的函数?或者至少做某种包装?
我不确定这是否可能(在浏览了 SO 之后,我实际上几乎确信这是完全不可能的)但是这里有些人含糊地提到可能有一个 kludge。任何想法 ?
assembly - 结构如何在程序集中作为参数传递
结构体如何在汇编中作为参数传递?
由于结构的大小比正常大,各个字段是否按顺序传递?
如果是这样,它们是否像正常参数一样以相反的顺序排列?
cdecl 和 stdcall 之间有什么区别吗?
c++ - 显式链接 DLL 中的 CDecl 清理代码
我在非托管 Win32 DLL 中有一个函数,它接受可变数量的参数,因此需要使用__cdecl
而不是__stdcall
任何其他调用约定。目前我正在显式链接到 DLL(也就是说,我正在使用LoadLibrary
而GetProcAddress
不是链接到 DLL 的.lib
文件)。
我可以很好地调用该函数,但是因为cdecl
我需要在每次调用后添加以下内联汇编指令:
如果我不包含内联程序集,那么程序在调用 addVecs 后会崩溃。
有什么方法可以编写 EXE 或 DLL,从而不需要内联汇编指令?例如,printf
它也是一个__cdecl
函数,但我不需要编写内联汇编来确保在每次调用后清理堆栈。
c++ - cdecl 和 std 调用 - 如何使我的代码常规化
我有在此代码中实现标准调用的任务 - 是 cdecl 或 std 调用
'mov eax, [ebp+8] // 获取第一个被推送的参数'
我理解推动指针位置的想法,但我不确定我会告诉指针在哪里看。
是那个 mov eax, [ebp+4/8/12] 或者你有什么
任何帮助告诉我我将如何做到这一点将不胜感激,同样,如果你们中的一个人确实解决了这个问题,可以添加解释
谢谢
c++ - X86 汇编 cdecl 混淆
早上,我在下面的“加密”例程中实现了一个 cdecl 调用方法。然而,虽然我的方法有效,但它并没有完全遵循推荐的(uni 和其他来源)。
建议赞赏(某些评论可能是“错误”的 cdecl 相关功能已标记为)
我的困惑是,我被告知对于每个推送的参数(在本例中为 2)我必须在调用之前推送,在函数内部再次推送,然后为每次额外推送执行 mov [ebp+n] - 在主体之前.
但是,如果我遵循以下逻辑:为每次推送执行 mov ebp 移位 - 不添加额外的推送,一切正常。但这很可能是一个错误。
如果需要,我可以发布一些参考文档。
代码提取:
c++ - 这里有必要保存FPU状态吗?
我写了一个简单的协作多线程库。目前,我总是在切换到新上下文时使用fxsave
/保存和恢复 fpu 状态。fxrstor
但这在 cdecl 调用约定中是必要的吗?
举个简单的例子:
编译器可以在调用后对 FPU 状态做出任何假设yield()
吗?
recursion - x8086 程序集中的逆向过程
我想要得到的序列的明确定义是 1*2 + 2*3 + 3*4 ... + i(i+1)。
我已经把它的数学记下来了,我发现这个系列的递归定义是 a_n = a_(n-1) + 2(n-1) ,其中 a_1 = 0 作为基本情况。我试图弄清楚为什么这段代码一直给我偶数系列:{2,4,6,8,10 ...} 而不是我要计算的系列