iT邦幫忙

0

GetProcAddress回傳是別的函數的位址

  • 分享至 

  • xImage

我想要抓MessageBoxW的位置,所以我寫了以下程式去執行這件事

#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
int main()
{
	

	FARPROC addr;
	(FARPROC&) addr = GetProcAddress(LoadLibrary(TEXT("USER32.dll")), "MessageBoxW");
	
	
	system("PAUSE");
    return 0;
}

但它的結果我用OD看,GetProcAddress回傳的位置都是apphelp.dll裡面的位置,進去看也不是MessageBoxW的函數,我已用OD確認過LoadLibrary(TEXT("USER32.dll"))是USER32.dll的基址,不知道為何會這樣,一直抓到別的DLL去。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
wwx
iT邦好手 1 級 ‧ 2019-05-14 09:21:27

看 LoadLibrary(TEXT("USER32.dll")
有用 TEXT("") 猜測所用的編譯環境是否為UNICODE
所以 "MessageBoxW" 是否也改用 TEXT("MessageBoxW") 試試呢?

wrxue iT邦好手 1 級 ‧ 2019-05-14 09:27:24 檢舉

您好,LoadLibrary裡用TEXT是因為它需要LPCTSTR,但MessageBoxW那個參數的宣告為LPCSTR,若用TEXT("MessageBoxW")會顯示編譯錯誤。

wwx iT邦好手 1 級 ‧ 2019-05-24 14:42:55 檢舉

使用vs2015才試出MessageBoxW用TEXT會顯示編譯錯誤的狀況, 但是程式這樣寫好像沒什麼問題
https://ithelp.ithome.com.tw/upload/images/20190524/200715458H27JX5cFl.png

我要發表回答

立即登入回答