问题标签 [assembly]
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.
com - x64 上的 COM 调用约定
我试图获得关于 COM 在 x64 机器上的行为方式的明确答案。在向 x64 机器上的 COM 接口调度调用时,Windows 是否使用正常的 x64 调用约定(假设 COM 实现是 64 位)?具体来说,我动态生成我的 vtbl 条目以指向在运行时动态加载的程序集块。这个程序集需要知道如何正确地从调用它的人那里获取参数。因此,我想知道 COM 是否使用标准 x64 调用约定(几乎是 fastcall)设置对我的程序集的调用。
c++ - 在主要 C/C++ 编译器生成的代码中注册分配规则
我记得以前的一些规则(32 位之前的英特尔处理器),当时(至少对我而言)非常频繁地必须分析 C/C++ 编译器(在我的情况下,当时是 Borland/Turbo)生成的汇编输出找到性能瓶颈,并安全地将汇编程序与 C/C++ 代码混合。诸如将 SI 寄存器用于this指针、将 AX 用于返回值、在汇编例程返回时应保留哪些寄存器等。
现在我想知道是否有更流行的 C/C++ 编译器(Visual C++、GCC、Intel ...)和处理器(Intel、ARM、...)的参考,如果没有,在哪里可以找到要创建的部分一。想法?
macos - 通过替换为 NOP 来修补 CALLL 在用户空间中有效,但在内核空间中无效
我有一个要修补的设备驱动程序。此设备驱动程序调用 IOLog,我想摆脱日志记录。
如果我用设备驱动程序 (kext) 中的(相应数量的)NOP 替换 CALLL 到 IOLog,内核会崩溃,看起来像一个破碎的堆栈(“Backtrace 终止 - 无效帧指针 0”)。
然而,相同的技术在用户空间中工作得很好(例如,在 OS X 二进制文件中 NOPping NSLogs)。
我在这里想念什么?
c - 在 ARM C 调用约定中要保存哪些寄存器?
自从我上次编写 arm assembler 以来已经有一段时间了,我对细节有点生疏了。如果我从 arm 调用 C 函数,我只需要担心保存 r0-r3 和 lr,对吗?
如果 C 函数使用任何其他寄存器,它是否负责将这些寄存器保存在堆栈上并恢复它们?换句话说,编译器会为 C 函数生成代码来执行此操作。
例如,如果我在汇编函数中使用 r10,我不必将其值压入堆栈或内存,并在 C 调用后弹出/恢复它,对吗?
这适用于 arm-eabi-gcc 4.3.0。
assembly - 是否有“低于”汇编的编程语言?
是否有“低于”汇编的编程语言?
documentation - Doxygen 和汇编语言
我想使用 Doxygen 来记录混合了 C 和 x86 汇编语言的遗留代码。汇编语言不是内联的,而是在单独的仅汇编文件中。如何记录汇编语言部分?
c - 16 位微控制器上的 C 培训
我的公司正在从汇编编码的微控制器过渡到 C。我们正在考虑 Microchip、Atmel、Renasas 等。人。用于使用 C 代码的未来项目。是否有很好的培训资源可以让我们的工程师跟上 C 的速度?研讨会,讲师,课程等。工程师的经验水平从没有培训到有些知识不等。
debugging - 是否可以“反编译”Windows .exe?或者至少查看大会?
我的一个朋友从 Facebook 下载了一些恶意软件,我很想知道它在不感染自己的情况下做了什么。我知道您不能真正反编译 .exe,但我至少可以在 Assembly 中查看它或附加调试器吗?
编辑说它不是 .NET 可执行文件,没有 CLI 标头。
python - Python ctypes 和函数调用
我的朋友制作了一个适用于 x86 的小型概念验证汇编器。我决定也将它移植到 x86_64,但我立即遇到了问题。
我用 C 写了一小段程序,然后编译和 objdump 代码。之后我将它插入到我的 python 脚本中,因此 x86_64 代码是正确的:
现在,为什么这个脚本在我运行它时总是出现分段错误?
我还有一个关于 mprotect 和没有执行标志的问题。据说它可以防止大多数基本的安全漏洞,如缓冲区溢出。但它被使用的真正原因是什么?你可以继续写,直到你点击 .text,然后将你的指令注入一个不错的 PROT_EXEC 区域。当然,除非您在 .text 中使用写保护
但是,为什么到处都有那个 PROT_EXEC 呢?.text 部分被写保护不是很有帮助吗?
gcc - 在 GCC 中转储寄存器的值
我需要使用 GCC 获取寄存器中的值。
与此类似的东西:
获取 32 位寄存器很容易,但我不确定获取标志的最简单方法是什么。
在本书的示例中:http: //kipirvine.com/asm/
他们通过获取整个 EFLAGS 寄存器并移位有问题的位来做到这一点。我也想过使用 Jcc 和 CMOVcc 来做这件事。
关于如何做到这一点的任何其他建议?一些要验证的测试用例也很有用。