インライン関数展開
- ページ: Develop
- 投稿者: novice?
- 優先順位: 低
- 状態: 提案
- カテゴリー: 覚え書き
- 投稿日: 2012-02-04 (土) 16:23:45
- バージョン:
メッセージ
インライン関数の展開で同じコードが生成されると思ったが同じにならなかった。
CDlgAbout.cpp, m_hWndに直接アクセスする場合
m_hWnd(DWORD PTR [ecx+12])をそのままpushしている。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| | #spanend
#spanadd
; 257 : }
#spanend
#spanadd
; 258 : return CDialog::OnBnClicked( wID );
#spanend
#spanadd
#spanend
#spanadd
jmp ?OnBnClicked@CDialog@@UAEHH@Z ; CDialog::OnBnClicked
#spanend
#spanadd
$LN1@OnBnClicke:
#spanend
#spanadd
push ebx
#spanend
#spanadd
push esi
#spanend
#spanadd
push edi
#spanend
#spanadd
#spanend
#spanadd
; 249 : case IDC_BUTTON_COPY:
#spanend
#spanadd
; 250 : {
#spanend
#spanadd
; 251 : HWND hwndEditVer = GetDlgItem( m_hWnd, IDC_EDIT_VER );
#spanend
#spanadd
#spanend
#spanadd
push 1126 ; 00000466H
#spanend
#spanadd
push DWORD PTR [ecx+12]
#spanend
#spanadd
call DWORD PTR __imp__GetDlgItem@8
#spanend
#spanadd
#spanend
#spanadd
; 252 : ::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );
#spanend
#spanadd
#spanend
#spanadd
mov esi, DWORD PTR __imp__SendMessageA@16
#spanend
#spanadd
push -1
#spanend
#spanadd
push 0
#spanend
#spanadd
mov ebx, 177 ; 000000b1H
#spanend
#spanadd
mov edi, eax
#spanend
#spanadd
push ebx
#spanend
#spanadd
push edi
#spanend
#spanadd
call esi
#spanend
#spanadd
|
CDlgAbout.cpp, GetHwnd()関数経由でアクセスする場合
eaxレジスタにm_hWnd(DWORD PTR [ecx+12])を代入してからpushしている。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| | #spanend
#spanadd
; 257 : }
#spanend
#spanadd
; 258 : return CDialog::OnBnClicked( wID );
#spanend
#spanadd
#spanend
#spanadd
jmp ?OnBnClicked@CDialog@@UAEHH@Z ; CDialog::OnBnClicked
#spanend
#spanadd
$LN1@OnBnClicke:
#spanend
#spanadd
#spanend
#spanadd
; 249 : case IDC_BUTTON_COPY:
#spanend
#spanadd
; 250 : {
#spanend
#spanadd
; 251 : HWND hwndEditVer = GetDlgItem( GetHwnd(), IDC_EDIT_VER );
#spanend
#spanadd
#spanend
#spanadd
mov eax, DWORD PTR [ecx+12]
#spanend
#spanadd
push ebx
#spanend
#spanadd
push esi
#spanend
#spanadd
push edi
#spanend
#spanadd
push 1126 ; 00000466H
#spanend
#spanadd
push eax
#spanend
#spanadd
call DWORD PTR __imp__GetDlgItem@8
#spanend
#spanadd
#spanend
#spanadd
; 252 : ::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );
#spanend
#spanadd
#spanend
#spanadd
mov esi, DWORD PTR __imp__SendMessageA@16
#spanend
#spanadd
push -1
#spanend
#spanadd
push 0
#spanend
#spanadd
mov ebx, 177 ; 000000b1H
#spanend
#spanadd
mov edi, eax
#spanend
#spanadd
push ebx
#spanend
#spanadd
push edi
#spanend
#spanadd
call esi
#spanend
#spanadd
|
|