用 fopen 找出来

逆向工程 拆卸 x86 C++
2021-06-11 07:39:35

谁能解释一下,为什么 fopen 将作为参数 - 而不是文件名 - 根据代码需要一些 off_6A5D8C:

.text:00537F9F                 push    offset stru_6C4E40 ; FILE *
.text:00537FA4                 call    _fclose
.text:00537FA9                 push    offset aWt      ; "wt"
.text:00537FAE                 push    offset off_6A5D8C ; char *
.text:00537FB3                 call    _fopen
.text:00537FB8                 mov     dword_83AE9C, eax

我跟踪了这​​个 off_6A5D8C,它指向标签 loc_4C554E:

.data:006A5D8C ; char off_6A5D8C
.data:006A5D8C off_6A5D8C      dd offset loc_4C554E    
.data:006A5D90 ; char aWt[]
.data:006A5D90 aWt             db 'wt',0
.text:004C554E loc_4C554E:
.text:004C554E                 mov     esp, ebp
.text:004C5550                 pop     ebp
.text:004C5551                 retn    0Ch

我不是反汇编专家,可能需要对 loc_4C554E 执行取消定义操作 - 在这种情况下,它看起来像:

.text:004C554E unk_4C554E      db  8Bh ; Ë             ; DATA XREF: .data:off_6A5D8Co
.text:004C554F                 db 0E5h ; õ
.text:004C5550                 db  5Dh ; ]
.text:004C5551                 db 0C2h ; T
.text:004C5552                 db  0Ch
.text:004C5553                 db    0

似乎是以 0 结尾的字符串。如何将此字符串(文件名)转换为可读的外观?提前致谢。

1个回答

它采用文件名,但 IDA 无法识别。

在此示例中,IDA 将4-byte 字符串NUL\x00( 4E 55 4C 00)解释0x004C554E代码中的偏移量(地址)。您可以通过a在光标位于行上时按下来强制它将其解释为简单的 ascii 字符串006A5D8C

字节顺序颠倒的原因是x86体系结构使用小端字节序,因此如果您将其解释4E 55 4C 00为数字,则字节顺序将被颠倒(因此0x004C554E)。