汇编:双字到十六进制转换问题

Assembly: Dword to Hex conversion problem

我是逆向工程的新手,在使用 IDA 时,我看到 wstring 'CPRE' 已在 rdata 部分转换如下:

rdata:00417B30 ; const WCHAR Caption

rdata:00417B30 Caption         dd 500043h  
rdata:00417B34 dword_417B34    dd 450052h             
rdata:00417B38 word_417B38     dw 0                    
 
rdata:00417B3A                 align 4

为什么?我的意思是,43h 是 'C' 的十六进制,50h 是 'P' 的十六进制,但为什么 00 介于两者之间? 有人可以帮忙吗?

代码为32位,IDA idafreeware64.

如您所说,这些是宽字符串,由宽(16 位)字符组成。

那些 dd 常量是 4 字节(32 位)。反汇编没有告诉你的是这些常量中有 high-order 0 个字节:

500043h真的是00500043h。它由两个字符 0050h (P) 和 0043h (C).

其他两个字母也是如此。它们之间没有 00h,这是文字中第一个 (lower-order) 字符的一部分。


这可以减少混淆(同时仍将其保留为原始数据,而不是解析为 wstring):

rdata:00417B30 Caption         dw 0043h  
rdata:00417B32 word_417B32     dw 0050h   
rdata:00417B34 word_417B34     dw 0052h   
rdata:00417B36 word_417B36     dw 0045h             
rdata:00417B38 word_417B38     dw 0

可以删除 00 的位置,但已包括在内以明确宽度。