问题标签 [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 调用约定中,signed char 和 short 如何作为参数传递
例如
是否与
或者它是否与
或者两者都可以(我们将高位视为脏)?
我可以在特殊编译器上做一些实验。但我不确定每一件事都非常详细。我只需要一些正式的承诺。
assembly - 在 cdecl 中,被调用者是否需要保留传递给它的参数?
假设我void f(int a, int b, int c) { g(a, b, c); h(a, b, c); }
在 x86 程序集中有这样的:
如果g
遵循 cdecl 调用约定,我是否保证g
不会更改堆栈中传递给它的参数?
c++ - CDECL 调用约定导致奇怪的警告 ASSEMBLY X86
大家好,我是汇编语言 x86 的新锐学习者,我正在尝试从一组加密指令中生成 CDECL 调用约定。我相信我在执行公约的过程中会出错。以下是作为问题给出的原始指令集和功能。还包括我的尝试(如果它完全错误,对汇编语言非常陌生,请原谅)。我在 C++ 开发设置中使用 Visual Studio 2013。
几行给出的警告是——警告 C4409:非法指令大小(在指令前使用“@”符号来标记适用的行)
此外,我还收到 2 个警告——警告 C4731:'encrypt_chars':'frame pointer register'ebp' 由内联汇编代码修改(在它适用的行之前使用了 '$' 符号)
这是子程序:
任何将不胜感激。谢谢
c - VS2013 中 printf 不使用 __cdecl
我今天的采访中有这样一个问题。
我的答案是5,1,但面试官说是5,2!当然,我知道 C 中默认的调用约定是 __cdecl,参数传递的顺序是从右到左,所以我把这件事告诉了他。但他不相信。比我们在 VS2013 上运行它。它显示 5,2!!!!
现在,我回到家在 ideone 上再试一次。答案是 5,1! http://ideone.com/sq6yRE 为什么?!我对此感到很困惑。请问谁能帮助我?
c++ - 是否可以在 __stdcall 中有一个导出的函数并且名称未损坏?
我正在开发一个项目来生成一个用于离线测试的虚拟 DLL。我们有真正的 DLL 及其头文件,尽管它们看起来不兼容。DLL 中的名称未被破坏,但函数前向声明声明被调用为__stdcall
:
例子.h
Dependency Walker 中的 example.dll:
据我所知,如果可以在__stdcall
约定中导出一个函数,它的名称应该在依赖 walker 中读取为:
这是否意味着我们的头文件与编译的 DLL 不对应,还是我遗漏了什么?
最终,我如何形成虚拟函数的导出,使其行为方式与我正在模拟的真实 DLL 相同?
assembly - 递增 %esp 和 CDECL
我一直在阅读 x86 堆栈和 CDECL 约定,并阅读了一些让我感到困惑的东西。
列出的调用者的职责包括弹出参数、使用它们或简单地增加 %esp 以删除它们。
最后一部分是如何工作的?
例如,假设 %esp 的初始值为 0x105000,并且您将当前堆栈帧的值减少 $0x1c。您分配了一些数据,然后将其递增回来 - 在这种情况下,这些数据不会仍然在内存中浮动吗?内存是怎么清除的?访问 0x104FF4 会导致分段错误,如果是,是什么清除了那里的数据?
c - cdecl 记录在哪里?
我正在为 Linux 上的 x86 编写一个简单的 C 编译器,我想使用 cdecl 调用约定(gcc 使用它,它似乎很常见)。
但是,我找不到任何官方或权威文档。维基百科有一个描述和一个例子。Raymond Chen 有一个简短的总结。我也没有在C11 规范中发现任何相关内容。
是否有 cdecl 的规范文档?
c++ - c++ 对象值如何从函数返回详细信息
嵌入式类型如 int、char 等可以使用寄存器从函数返回,但如果函数返回一些大对象怎么办。我建议不能将进程的堆栈用于此类问题,对吗?谁能解释对象如何传递给被调用者?
assembly - 创建 cdecl 函数时如何保留寄存器的状态?
我正在编写一个使用cdecl
调用约定的函数,因此我需要确保寄存器的状态在调用函数之前保持不变。
我的问题是这通常是如何执行的。只是在函数开始时将寄存器压入堆栈然后在函数结束时将它们弹出到寄存器中吗?
c++ - 简单的加密汇编程序 - 写入内存位置的访问冲突
我必须在这个程序中实现一个 cdecl 调用约定,该程序最初使用的是非标准化约定。据我所知,它看起来是正确的,但是我收到一个未处理的异常错误,说“访问违规写入位置 0x00000066,当程序到达“not byte ptr [eax]”行或至少这是打破程序后的箭头指向。
谁能告诉我我的程序出了什么问题以及如何解决它?谢谢你。