Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
在 x86 平台中使用 -mcmodel=kernel 标志
我正在尝试将为 x86 架构构建的设备驱动程序交叉编译到 ARM 平台 它的编译没有任何错误 但我认为所有功能都不可用 所以我检查了 makefile 并找到了这个特定的部分 ifeq ARCH x86 64 EXTRA CFLAGS mc
c
gcc
makefile
x8664
redzone
输入新功能时 rsp 不会移动[重复]
这个问题在这里已经有答案了 当进入 C 函数时 我希望在反汇编中看到堆栈指针如何被减去足以为变量腾出空间 但没有 我只看到当esp仍然指向ebp时如何通过ebp直接访问变量的地址 push rbp mov rsp rbp movl 0x4
Assembly
stack
x8664
redzone
为什么编译器保留一点堆栈空间而不是整个数组大小?
下面的代码 int main int arr 120 return arr 0 编译成这样 sub rsp 360 mov eax DWORD PTR rsp 480 add rsp 360 ret 知道整数是 4 个字节 数组大小是 12
Assembly
x8664
stackmemory
redzone
为什么 x86-64 GCC 函数序言分配的堆栈少于局部变量?
考虑以下简单的程序 int main int argc char argv char buffer 256 buffer 0 0x41 buffer 128 0x41 buffer 255 0x41 return 0 在 x86 64 机器
Assembly
gcc
stack
x8664
redzone
系统V ABI的红区是如何实现的
编译器如何确保红色区域不被破坏 是否存在空间过度分配的情况 是什么因素导致选择128字节作为红色区域的大小 编译器不会 它只是利用担保的RSP 以下的空间不会异步地被破坏 例如被信号处理程序破坏 进行函数调用当然会同步破坏它 事实上 在Li
Linux
gcc
x8664
ABI
redzone
破坏红色区域的内联汇编
我正在编写一个加密程序 其核心 一个广泛的乘法例程 是用 x86 64 汇编语言编写的 既是为了速度 也是因为它广泛使用诸如adc我不想内联这个函数 因为它很大并且在内循环中被调用多次 理想情况下 我还想为此函数定义一个自定义调用约定 因为
c
gcc
x86
inlineassembly
redzone