以下是IDA生成的一段代码:
v64 = 24;
v65 = byte_C747D9[v77[0]];
memcpy(v66, v55, sizeof(v66));
if ( mmi_application_types__t_data_formatD5(0x18u) )
以上第4行中的函数调用中的参数是常数0x18,也就是10进制的24。
第1行中出现过24,难道IDA在函数调用语句中把参数v64改成了0x18?
查看对应的汇编代码:
.text:00AA185C mov byte ptr [ebp+var_A268], 18h
.text:00AA1863 mov eax, 0
.text:00AA1868 mov al, [ebp+var_A1CD]
.text:00AA186E mov al, byte_C747D9[eax]
.text:00AA1874 mov byte ptr [ebp+var_A268+1], al
.text:00AA187A lea edx, [ebp+var_A264]
.text:00AA1880 lea eax, [ebp+var_A3B8]
.text:00AA1886 sub esp, 4
.text:00AA1889 push 64h ; Size
.text:00AA188B push eax ; Src
.text:00AA188C push edx ; Dst
.text:00AA188D call _memcpy
.text:00AA1892 mov eax, 0
.text:00AA1897 mov al, byte ptr [ebp+var_A268]
.text:00AA189D mov [esp+1Ch+var_1C], eax
.text:00AA18A0 call _mmi_application_types__t_data_formatD5
果然如此!原始代码中此处的调用语句的参数确实是v64。如果改成常数0x18将不利于对程序的理解和未来的维护。