【发布时间】:2017-02-23 00:32:11
【问题描述】:
我有一个函数:
long foo(long x, long y, long z);
我从 GCC 获得了这个程序集输出,我正试图弄清楚是什么 发生将其转换为 C 函数。
我是组装新手,完全不知道这里发生了什么。
富:
subq %rdx %rsi
imulq %rsi %rdi
movq %rsi %rax
salq $63 %rax
sarq $63 %rax
xorq %rdi %rax
x,y,z 分别传入寄存器 %rdi, %rsi, & %rdx
【问题讨论】:
-
你没有说清楚你需要什么帮助。你知道
subq做什么吗?如果是这样,您是否能够将第一条指令翻译成等效的 C?如果有,你得到了什么?如果不是,这样做有什么问题? -
提示:移位将 rax 的低位广播到 rax 中的每个位。 This answer 也使用算术移位作为比特广播,但使用它有条件地将其他结果归零,而不是异或。
-
响应我需要帮助的问题,我不知道从哪里开始。
标签: c assembly x86-64 reverse-engineering