这些指令是做什么的?

逆向工程 二元分析
2021-06-12 21:51:21

我很难弄清楚这到底在做什么。

mov     rax, [rbp+var_720]
mov     [rbp+var_458], rax
mov     rax, [rbp+var_458]
mov     [rbp+command_], rax
mov     rax, [rbp+something_weird_idk]
mov     [rbp+var_4D8], rax
mov     rax, [rbp+var_4D8]
mov     [rbp+var_4D0], rax
mov     rax, [rbp+var_4D0]
mov     [rbp+var_4C8], rax
mov     rax, [rbp+var_4C8]
movzx   ecx, byte ptr [rax]
and     ecx, 1               <- Breakpoint here
cmp     ecx, 0
jz      loc_100003CFE

我想要实现的不是跳转到 loc_1000...,所以如果我理解正确,cmp指令应该返回 1(如此真实)。

有了断点,RAX就是这个

__common:00000001000181C8 _command:                             
__common:00000001000181C8                                         
__common:00000001000181C8 sbb     [rcx+55h], al
__common:00000001000181CB push    rsp
__common:00000001000181CC db      48h, 45h
__common:00000001000181CC push    rsp
__common:00000001000181D0 db      49h, 43h
__common:00000001000181D0 push    r12
__common:00000001000181D4 add     [r8], r8b

虽然和往常一样,不知道这是在做什么。

任何人都可以对此有所了解吗?

另外,为什么程序集通过多个变量移动数据?例如,在断点之前和之后mov rax, [rbp+something_weird_idk],它基本上是在[rbp+something..]不做任何事情的情况下遍历多个变量。这是为什么?

1个回答

我想要实现的不是跳转到 loc_1000...,所以如果我理解正确,cmp 指令应该返回 1(如此真实)。

您可以用jz说明替换nop说明。

断点在那里,RAX 就是这个 虽然和往常一样,不知道这是做什么的。任何人都可以对此有所了解吗?

这个内存部分不是代码,而是一个字符串:

cat test.asm
BITS 64

sbb     [rcx+55h], al
push    rsp
db      48h, 45h
push    rsp
db      49h, 43h
push    r12
add     [r8], r8b

hexdump -Cv test
00000000  18 41 55 54 48 45 54 49  43 41 54 45 00 00        |.AUTHETICATE..|

另外,为什么程序集通过多个变量移动数据?例如,在断点之前和 mov rax 之后,[rbp+something_weird_idk],它基本上是通过多个变量移动 [rbp+something..] 而不做任何事情。这是为什么?

在没有优化选项的情况下使用 gcc 时,这是典型的。