`__common` 部分中的这个程序集在做什么?

逆向工程 部件
2021-06-15 09:27:58

我偶然发现了这一点:

public _oret
__common:0000000100018000 _oret:                             

__common:0000000100018000 sub     [rdi+4Fh], al
__common:0000000100018003 db      4Fh
__common:0000000100018003 and     [rdi+4Fh], r10b
__common:0000000100018008 push    rdx
__common:0000000100018009 and     [r8], rsp
__common:000000010001800C db      40h, 46h, 43h
__common:000000010001800C xor     r14d, [r14]
__common:0000000100018012 xor     eax, 0A20h

这究竟是在做什么?我的 RAX 指向这里,但我不明白这样做的目的是什么。

2个回答

如果您查看转储窗口或十六进制编辑器中的字节,很容易发现

或者,如果您没有字节而只有文本形式的反汇编,您可以使用诸如 keystone 之类的一些汇编程序来组装它并将
字节转储为可打印字符

C:\>cat ge0snow.py
from keystone import *
import binascii

code = [
    "sub [rdi+4Fh], al",
    "db 04Fh",
    "and [rdi+4Fh], r10b",
    "push rdx",
    "and [r8], rsp",
    "db 040h",
    "db 046h",
    "db 043h",
    "xor r14d, [r14]",
    "xor eax, 0A20h",
]
ks = Ks(KS_ARCH_X86,KS_MODE_64)
for i in range(0,len(code),1):
    if( code[i][:2] == "db"):
        print (binascii.a2b_hex(code[i][4:6])),
    else:
        foo = ks.asm(code[i])
        for j in foo[0]:
            print chr(int(j)),


C:\>python ge0snow.py
( G O O D   W O R I !   @ F C E 3 6 5

__common部分似乎是典型的 Mach-O 格式。它包含未初始化的外部全局变量,类似于static变量。

在您的情况下,它包含一个常量字符串,如 blabb 所示。但是,您最好将其显示为字符串(而不是代码)。

请参阅:Apple 的“代码大小性能指南简介中的 Mach-O 可执行格式概述