Develop/5 のバックアップの現在との差分(No.2)




  • 追加された行はこの色です。
  • 削除された行はこの色です。
* インライン関数展開 [#gebded62]
-ページ:     [[Develop]]
-投稿者:     [[novice]]
-優先順位:   低
-状態:       提案
-カテゴリー: 覚え書き
-投稿日:     2012-02-04 (土) 16:23:45
-バージョン: 

** メッセージ [#k8b0949a]
インライン関数の展開で同じコードが生成されると思ったが同じにならなかった。

CDlgAbout.cpp, m_hWndに直接アクセスする場合

m_hWnd(DWORD PTR [ecx+12])をそのままpushしている。

#code(c){{
; 257  : 	}
; 258  : 	return CDialog::OnBnClicked( wID );

	jmp	?OnBnClicked@CDialog@@UAEHH@Z		; CDialog::OnBnClicked
$LN1@OnBnClicke:
	push	ebx
	push	esi
	push	edi

; 249  : 	case IDC_BUTTON_COPY:
; 250  : 		{
; 251  : 			HWND hwndEditVer = GetDlgItem( m_hWnd, IDC_EDIT_VER );

	push	1126					; 00000466H
	push	DWORD PTR [ecx+12]
	call	DWORD PTR __imp__GetDlgItem@8

; 252  : 			::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );

	mov	esi, DWORD PTR __imp__SendMessageA@16
	push	-1
	push	0
	mov	ebx, 177				; 000000b1H
	mov	edi, eax
	push	ebx
	push	edi
	call	esi
}}

CDlgAbout.cpp, GetHwnd()関数経由でアクセスする場合

eaxレジスタにm_hWnd(DWORD PTR [ecx+12])を代入してからpushしている。

#code(c){{
; 257  : 	}
; 258  : 	return CDialog::OnBnClicked( wID );

	jmp	?OnBnClicked@CDialog@@UAEHH@Z		; CDialog::OnBnClicked
$LN1@OnBnClicke:

; 249  : 	case IDC_BUTTON_COPY:
; 250  : 		{
; 251  : 			HWND hwndEditVer = GetDlgItem( GetHwnd(), IDC_EDIT_VER );

	mov	eax, DWORD PTR [ecx+12]
	push	ebx
	push	esi
	push	edi
	push	1126					; 00000466H
	push	eax
	call	DWORD PTR __imp__GetDlgItem@8

; 252  : 			::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );

	mov	esi, DWORD PTR __imp__SendMessageA@16
	push	-1
	push	0
	mov	ebx, 177				; 000000b1H
	mov	edi, eax
	push	ebx
	push	edi
	call	esi
}}

----

#comment
#attach


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS