Dmi*_*riy 2 c algorithm assembly reverse-engineering x86-64
Denis Yurichev 的逆向工程挑战 #10 https://challenges.re/10/中有这样一段 asm 代码片段
优化 GCC 4.8.2:
这段代码很短,但是很棘手。它有什么作用?它在低级编程中大量使用,并且为许多低级程序员所熟知。有多种计算方法,这就是其中之一。
Run Code Online (Sandbox Code Playgroud)f: lea eax, [rdi-1+rsi] neg esi and eax, esi ret
在 C 语言中,这段代码看起来像这样:
(a+b-1) & (-b)
Run Code Online (Sandbox Code Playgroud)
请帮我弄清楚这段代码的作用以及它的用途
我对 a 和 b 运行了几个测试值,但没有看到模式
正如 Peter Cordes 在评论中暗示的那样,该表达式(a+b-1) & (-b)可能仅在b是 2 的幂时才有用。在这种情况下,结果将a向上舍入为 的倍数b。
例如,a=33 且 b=32,结果为 64。
这样的表达式在内存分配或对齐计算中可能很有用(C 标准指定对齐对于每种类型都是 2 的幂)。