Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
为什么push指令会改变rsp的值? [复制]
这个问题在这里已经有答案了 我正在检查 Ericksons Hacking The Art of Exploitation 中的这段代码片段 void test function int a int b int c int d int fl
c
Assembly
x8664
Linux 如何在 x86-64 中支持超过 512GB 的虚拟地址范围?
Linux 中 x86 64 的用户虚拟地址空间为 47 位长 这本质上意味着 Linux 可以映射大约 128 TB 虚拟地址范围的进程 然而 令我困惑的是 x86 64 架构支持 ISA 为每个进程定义的 4 级分层页表 排列为基数树
Linux
Linuxkernel
x8664
MMU
GCC 内联汇编错误:“‘int’的操作数大小不匹配”
首先 如果有人知道标准 C 库的函数 则会打印 一个字符串 无需寻找二进制零 但需要绘制字符数 请告诉我 否则 我会遇到这个问题 void printStringWithLength char str ptr int n chars asm
c
Assembly
gcc
x8664
inlineassembly
为什么 Linux/gnu 链接器选择地址 0x400000?
我正在 Linux x86 64 上试验 ELF 可执行文件和 gnu 工具链 我已经链接并剥离 手动 Hello World 测试 global start text start mov 1 rax 转换为 267 字节 ELF64 可执
Linux
x86
x8664
ld
ELF
如何在 x86_64 上准确地衡量未对齐访问速度?
In 一个答案 https stackoverflow com questions 45116212 are packed structs portable 45116730 45116730 我已经说过 在很长一段时间内 未对齐访问的速度
performance
x86
x8664
benchmarking
inlineassembly
Fork 系统调用失败后 rax 中的返回值是多少?
我知道打电话fork 在C中如果有错误将返回 1 但我想知道当你调用时错误返回值是什么sys fork在装配中 我通常会假设它也返回 1 但我已经处理过 sys brk 并且汇编中的原始系统调用返回与 C Brk 包装器不同的东西 有谁知道
Linux
Assembly
x8664
systemcalls
最小操作码大小 x86-64 strlen 实现
我正在研究最小操作码大小x86 64 strlen我的代码高尔夫 二进制可执行文件的实现不应超过一定的大小 为简单起见 请考虑 demoscene 总体思路来自于here http www int80h org strlen 尺寸优化思路来
Assembly
nasm
x8664
yasm
为什么 printf 仍然可以在 RAX 小于 XMM 寄存器中 FP 参数数量的情况下工作?
我正在关注Linux 64系统中的 开始x64汇编编程 一书 我正在使用 NASM 和 gcc 在关于浮点运算的章节中 本书指定了以下用于添加 2 个浮点数的代码 在本书和其他在线资源中 我读到寄存器 RAX 根据调用约定指定要使用的 XM
Linux
Assembly
x8664
nasm
callingconvention
算术恒等式和 EFLAGS
因为 x not x 1 意味着 a b a not b 1 那么 sub rax rcx 相当于 mov temp rcx not temp add rax temp add rax 1 其中 temp 是一些被认为是易失性的寄存器 换句
Assembly
x86
x8664
eflags
在 x86-64 上,“movnti”指令是原子指令吗?
在 x86 64 CPU Intel 或 AMD 上 将 4 8 字节写入 32 64 位对齐地址的 movnti 指令是原子的吗 Yes movnti在自然对齐的地址上是原子的 就像 x86 上所有其他自然对齐的 8 16 32 64b
x8664
atomic
汇编程序中的重定位截断错误
我对汇编语言完全陌生 我尝试编写简单的程序来破译凯撒密码 问题是链接后我收到以下错误 cezar o In function loop text 0xbf relocation truncated to fit R X86 64 8 aga
Assembly
x8664
att
relocation
从信号处理程序返回而不进入内核+用户空间中断
这是我的旧问题的后续 通过 setcontext 从信号处理程序返回 https stackoverflow com questions 69237910 returning from a signal handler via setcon
Linux
Assembly
signals
x8664
interrupt
将 32 位和 64 位代码链接到一个二进制文件中
在对此问题的评论中 内核空间 C 代码中简单指针算术的意外行为 https stackoverflow com questions 49470691 unexpected behaviour in simple pointer arithm
gcc
x8664
osdev
binutils
nasm idiv 为负值
尝试将正数除以负数 目前我的程序将正确划分 并且我可以正确访问其余部分 但是当我输入一个正数除以一个负值时 它根本不会被除 我知道有一种方法可以 签名扩展 并且它会正确划分 我只是看不懂说明书 movsss imm reg reg mem
Assembly
x8664
nasm
integerdivision
X86: `movsxd rdx,edx`指令是什么意思?
我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
Assembly
x8664
MOV
retq 和 ret 有什么区别?
让我们考虑以下程序 它计算参数的无符号平方 global foo text foo mov rdi rax mul rdi ret 这是正确编译的as 但反汇编为 0000000000000000
Linux
Assembly
x8664
C 语言的完整 x86/x64 JIT 汇编器
你知道类似的事情吗this http code google com p asmjit 但是可以嵌入到 C 程序中吗 一些选项 LibJIT http www gnu org software dotgnu GNU闪电 http www g
Assembly
x86
x8664
JIT
在 x86-64 asm 中:如果源操作数是两个立即值,是否有办法优化两个相邻的 32 位存储/写入内存?
有没有一个好的方法来优化这段代码 x86 64 mov dword ptr rsp 0 mov dword ptr rsp 4 0 其中立即值可以是任何值 不一定为零 但在这种情况下始终是立即常量 原双店还慢吗 硬件中的写组合和 op 的并
Assembly
Optimization
x8664
microoptimization
未优化的 clang++ 代码在简单的 main() 中生成不需要的“movl $0, -4(%rbp)”
我创建了一个最小的 C 程序 int main return 1234 并使用 clang 5 0 禁用优化 默认 O0 得到的汇编代码是 https gcc godbolt org z OYLghAFBqd5QCxAYwPYBMCmBRd
c
Assembly
Clang
LLVM
x8664
在 x86_64 linux 中重定位超过 2GB 的程序时出现链接器错误?
我有一个用户程序 通常编译为有一个入口点0x400460我必须重新定位才能有一个从以下位置开始的入口点2GBLinux 中加载的共享库 例如 linux vdso so 1 gt 0x00007fff109cd000 libc so 6 g
c
Linux
gcc
Linker
x8664
«
1
2
3
4
5
6
...20
»