谁能解释,为什么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执行Undefine操作-在这种情况下,它看起来像:
.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结尾。将此字符串(文件名)转换为可读的外观?
谢谢您。

评论

这是“ NUL”与0x004C554E之间的区别吗?对于将来的问题,在您的视图中包括原始字节可能会有所帮助。

#1 楼

它使用文件名,但IDA无法识别它。
在此示例中,IDA将4字节字符串NUL\x004E 55 4C 00)解释为代码中的偏移量(地址0x004C554E)。您可以通过在光标位于006A5D8C行时按a来使其简单地将其解释为ascii字符串。
字节顺序相反的原因是x86体系结构使用的字节序很少,因此如果您将4E 55 4C 00解释为数字,字节顺序将被反转(因此0x004C554E)。

评论


非常感谢,bart1e!

– black4
20年7月6日在16:58