Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
如何在 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
在堆栈上为 execve 创建一个 arg 数组
我想编写一个汇编程序 通过 EXECVE 系统调用 0x3C 使用开关 al 执行程序 bin ls 手册页 man 2 execve 指出该调用需要三个值 int execve const char filename char const
Assembly
x8664
Shellcode
在 x86-64 中使用 32 位寄存器/指令的优点
有时 gcc 使用 32 位寄存器 而我希望它使用 64 位寄存器 例如以下 C 代码 unsigned long long div unsigned long long a unsigned long long b return a b
gcc
Assembly
x8664
microoptimization
使用 x64 SIMD 进行半字节改组
我知道字节改组 https www felixcloutier com x86 pshufb指令 但我想对半字节 4 位值 做同样的事情 具体来说 我想在 64 位字中混洗 16 个半字节 我的洗牌索引也存储为 16 个半字节 最有效的实施
x8664
SIMD
SSE
使用 x64 汇编代码的基本输入
我正在编写有关汇编中基本输入和输出的教程 我使用的是 64 位 Linux 发行版 Ubuntu 在教程的第一部分中 我讨论了基本输出并创建了一个简单的程序 如下所示 global start section text start mov
Linux
Assembly
IO
nasm
x8664
«
1
2
3
4
5
6
7
8
...23
»