一个C#程序的反汇编的问题,不太明白DispatchMessageW()函数的参数在哪里?

时间:2021-09-26 18:44:56

0012F2F4   00FC1056  /CALL 到 DispatchMessageW 来自 00FC1054
0012F2F8   0012F380  \pMsg = WM_PAINT hw = 420384 ("Form1")



00FC1025    51              push    ecx
00FC1026    52              push    edx
00FC1027    64:8B1D 380E000>mov     ebx, dword ptr fs:[E38]
00FC102E    8B7B 0C         mov     edi, dword ptr [ebx+C]
00FC1031    897E 04         mov     dword ptr [esi+4], edi
00FC1034    8973 0C         mov     dword ptr [ebx+C], esi
00FC1037    68 00000000     push    0
00FC103C    68 3EB341C8     push    C841B33E
00FC1041    FF76 E4         push    dword ptr [esi-1C]
00FC1044    C643 08 00      mov     byte ptr [ebx+8], 0
00FC1048    F643 04 5F      test    byte ptr [ebx+4], 5F
00FC104C    75 29           jnz     short 00FC1077
00FC104E    8B46 08         mov     eax, dword ptr [esi+8]
00FC1051    8B40 1C         mov     eax, dword ptr [eax+1C]
00FC1054    FF10            call    dword ptr [eax]


下面是寄存器的值:

引用
EAX 7B44332C System_W.7B44332C
ECX 0012F380
EDX 0012F380
EBX 00150C30
ESP 0012F2F4
EBP 0012F30C
ESI 0012F324
EDI 0012F338

EIP 77D189D9 USER32.DispatchMessageW

C 0  ES 0023 32位 0(FFFFFFFF)
P 1  CS 001B 32位 0(FFFFFFFF)
A 0  SS 0023 32位 0(FFFFFFFF)
Z 1  DS 0023 32位 0(FFFFFFFF)
S 0  FS 003B 32位 7FFDF000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_SUCCESS (00000000)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)


有谁能告诉我 DispatchMessageW() 函数的参数在哪里?
还有 EAX 7B44332C System_W.7B44332C 是什么东西?C#程序 的架构是不是与 WIN32程序 的不太一样?
反汇编 PhotoShop.EXE 那么大的程序,都能找到 DispatchMessageW() 的参数,怎么这个小小的C#程序就找不到?

4 个解决方案

#1


这个问题很难吗?诸位各位帮帮忙看看啊,呵呵,,,,,

#2


你看寄存器的值有啥用?要看堆栈中的值
DispatchMessageW的参数正常情况下应该被压入堆栈。

#3


引用 2 楼 mydo 的回复:
你看寄存器的值有啥用?要看堆栈中的值
DispatchMessageW的参数正常情况下应该被压入堆栈。


呵呵,我就是在找堆栈哎,版主帮忙看一下到底在哪里?


0012F2F4   00FC1056  /CALL 到 DispatchMessageW 来自 00FC1054
0012F2F8   0012F380  \pMsg = WM_PAINT hw = 420384 ("Form1")



00FC1025 51              push ecx
00FC1026 52              push edx
00FC1027 64:8B1D 380E000>mov ebx, dword ptr fs:[E38]
00FC102E 8B7B 0C         mov edi, dword ptr [ebx+C]
00FC1031 897E 04         mov dword ptr [esi+4], edi 
00FC1034 8973 0C         mov dword ptr [ebx+C], esi
00FC1037 68 00000000     push 0
00FC103C 68 3EB341C8     push C841B33E
00FC1041 FF76 E4         push dword ptr [esi-1C]
00FC1044 C643 08 00      mov byte ptr [ebx+8], 0
00FC1048 F643 04 5F      test byte ptr [ebx+4], 5F
00FC104C 75 29           jnz short 00FC1077
00FC104E 8B46 08         mov eax, dword ptr [esi+8]
00FC1051 8B40 1C         mov eax, dword ptr [eax+1C]
00FC1054 FF10            call dword ptr [eax]


难道是在这里?不太明白C#的程序参数位置怎么不太一样呢?


00FC1041    FF76 E4         push    dword ptr [esi-1C]

#4


1堆栈不全

2 确定堆栈捕捉的时机正确

3 确定你调用的是你想要的api

#1


这个问题很难吗?诸位各位帮帮忙看看啊,呵呵,,,,,

#2


你看寄存器的值有啥用?要看堆栈中的值
DispatchMessageW的参数正常情况下应该被压入堆栈。

#3


引用 2 楼 mydo 的回复:
你看寄存器的值有啥用?要看堆栈中的值
DispatchMessageW的参数正常情况下应该被压入堆栈。


呵呵,我就是在找堆栈哎,版主帮忙看一下到底在哪里?


0012F2F4   00FC1056  /CALL 到 DispatchMessageW 来自 00FC1054
0012F2F8   0012F380  \pMsg = WM_PAINT hw = 420384 ("Form1")



00FC1025 51              push ecx
00FC1026 52              push edx
00FC1027 64:8B1D 380E000>mov ebx, dword ptr fs:[E38]
00FC102E 8B7B 0C         mov edi, dword ptr [ebx+C]
00FC1031 897E 04         mov dword ptr [esi+4], edi 
00FC1034 8973 0C         mov dword ptr [ebx+C], esi
00FC1037 68 00000000     push 0
00FC103C 68 3EB341C8     push C841B33E
00FC1041 FF76 E4         push dword ptr [esi-1C]
00FC1044 C643 08 00      mov byte ptr [ebx+8], 0
00FC1048 F643 04 5F      test byte ptr [ebx+4], 5F
00FC104C 75 29           jnz short 00FC1077
00FC104E 8B46 08         mov eax, dword ptr [esi+8]
00FC1051 8B40 1C         mov eax, dword ptr [eax+1C]
00FC1054 FF10            call dword ptr [eax]


难道是在这里?不太明白C#的程序参数位置怎么不太一样呢?


00FC1041    FF76 E4         push    dword ptr [esi-1C]

#4


1堆栈不全

2 确定堆栈捕捉的时机正确

3 确定你调用的是你想要的api