Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
使用 rdmsr/rdpmc 提高分支预测精度
我试图了解分支预测单元在 CPU 中如何工作 我用过papi还有linux的perf events但他们都没有给出准确的结果 对于我的情况 这是我的代码 void func int arr int sequence len for int
c
x86
performancecounter
branchprediction
papi
不使用相关性直接在ASM中调用/跳转(x86)
我正在将一个 C DLL 注入到游戏中 并且想将一个函数挂接到我自己的一些代码上 由于DLL每次都会映射到不同的位置 因此直接跳转和调用会更容易 另外 因为这是一个钩子 所以当我返回该函数时 我不想更改堆栈或寄存器 我声明一个 char 来
Assembly
dll
x86
为什么在 shellcode 中使用 Push/Pop 而不是 Mov 将数字放入寄存器中?
我有一些来自 shell 代码有效负载的示例代码 显示了 for 循环并使用 push pop 来设置计数器 push 9 pop ecx 为什么不能直接使用mov呢 mov ecx 9 是的 通常你应该总是使用mov ecx 9出于性能原
Assembly
x86
exploit
Shellcode
汇编内存操作数说明
我理解 例如 BX 位于括号之间时 它指的是其内存内容 但同时我也不明白这一点 CMP BX 12ADH 在那个例子中我不明白真正比较的是什么 MOV EBX BX 对于此移动也是如此 我不知道正在移动的内容及其内存地址或其中的值 CMP
Assembly
x86
x86 TEST 指令不起作用?
我一直在用头撞墙来解决这个问题 但这对我来说毫无意义 为什么这个程序会进入死循环 我以为你可以用test比较两个值是否相等 如图所示here https stackoverflow com questions 6002079 为什么不起作用
c
Assembly
x86
当执行 uop 计数不是处理器宽度倍数的循环时,性能是否会降低?
我想知道不同大小的循环在最新的 x86 处理器上如何执行 作为 uop 数量的函数 这里引用 Peter Cordes 的一段话 他在 中 中提出了非 4 倍数的问题另一个问题 https stackoverflow com a 31027
performance
Assembly
x86
cpuarchitecture
microoptimization
长延迟指令
I would like a long latency single uop x861 instruction in order to create long dependency chains as part of testing mic
Optimization
x86
cpuarchitecture
microoptimization
microbenchmark
Skylake 中干净缓存行的写回?
我观察到 Skylake SP 在真实硬件上对干净的缓存行进行写回 Leeor 对这篇文章的回答对于 Intel Core i3 i7 数据从缓存集中逐出后的去向 https stackoverflow com questions 1941
x86
intel
cpuarchitecture
cpucache
在x86汇编中,为imul使用两个单独的寄存器是否更好?
我想知道 主要是出于好奇 使用相同的寄存器进行操作是否比使用两个更好 考虑到性能和 或其他问题 什么会更好 mov rbx rcx imul rcx rcx or mov rbx rcx imul rbx rcx 任何有关如何对此进行基准测
performance
Assembly
x86
microoptimization
直接读取程序计数器
Intel CPU 上的程序计数器可以在内核模式或其他模式下直接读取 即没有 技巧 吗 不 EIP IP 无法直接访问 但在位置相关代码中 它是链接时间常量 因此您可以使用附近 或远处 的符号作为立即数 mov eax nearby lab
Assembly
x86
programcounter
现代 x86 CPU 使用什么缓存一致性解决方案?
我对缓存一致性系统在现代多核 CPU 中的功能有些困惑 我已经看到基于侦听的协议 例如基于 MESIF MOESI 侦听的协议 已在 Intel 和 AMD 处理器中使用 另一方面 基于目录的协议对于多核来说似乎更加高效 因为它们不广播而是
x86
computerscience
cpuarchitecture
cpucache
MESI
x86 区分指令和数据的方法
是否有一种或多或少可靠的方法来判断内存中某个位置的数据是处理器指令的开头还是其他数据 例如 E8 3F BD 6A 00 may be call操作说明 E8 相对偏移量为0x6ABD3F 或者它可能是属于其他指令的三个字节的数据 后跟pu
c
Assembly
x86
int64_t的宽度,总是64位吗?
对于以下代码 static inline float fix2float int64 t f return float f 1 lt lt 60 lt error here 编译器向我发出这些警告 warning left shift co
c
gcc
x86
__libc_start_main@plt 如何工作?
为了研究目标文件在linux中是如何加载和运行的 我制作了最简单的c代码 文件名为simple c int main 接下来 我创建目标文件并将目标文件另存为文本文件 gcc simple c objdump xD a out gt sim
Linux
gcc
dynamiclinking
x86
ELF
assembly x86 qemu:致命:尝试在 RAM 或 ROM 之外执行代码
我正在开发一个非常基本的 shell 其中当前唯一的命令是 help 如果您输入错误 系统会通知您该命令无法识别 在段和堆栈设置的某个地方 我有一个错误 导致 shell 在我输入任何内容后吐出一些废话 然后完全冻结 我在终端中遇到错误 q
Assembly
operatingsystem
x86
nasm
qemu
在保护模式下读取键盘
我正在尝试制作 PS 2 键盘控制器 但无法正常工作 outb 0x60 0xED outb 0x60 2 Turn on CapsLock LED doesn t works char c 0 while c 1 if inb 0x60
c
x86
osdev
baremetal
protectedmode
为什么 GCC 减去 1 并比较 <= 2?在汇编中使用 2 的幂时 cmp 是否更快?
我正在编写一些代码来将屏幕清除为特定颜色 C 代码 void clear screen unsigned int color void memory int height int width unsigned int pixel unsig
c
Assembly
gcc
x86
x8664
为什么我有 PUSH ecx?
有人可以告诉我这两个的目的是什么吗push ecx下面的说明 我不明白他们到底要做什么 我意识到push epb正在保存堆栈基指针 然后mov epb esp正在将堆栈指针分配给前一个堆栈基指针 int main 01301190 push
Assembly
x86
NDK:libm 静态链接
我在尝试使用最新的 android 9 x86 平台编译源代码时遇到问题 主要问题 为什么是静态库libm a和动态的libm so是不同的 问题是我尝试编译 path to android ndk r8 toolchains x86 4
Android
static
x86
androidndk
libm
mov ah、word_variable 上的“无效指令操作数”以及在 16 位数字上使用 imul
这是我想要实现的目标 a x b x a y b y a z b z 我正在尝试在汇编中创建一个宏来执行上述计算 我在用WORDs 代表我所有的号码 这是我的代码 dotProduct MACRO A X A Y A Z B X B Y B
Assembly
macros
x86
MASM
«
1
2
3
4
5
6
7
...49
»