這段asm程式碼如何轉成Delphi |
答題得分者是:pcboy
|
ddddd688
一般會員 發表:8 回覆:8 積分:3 註冊:2007-01-30 發送簡訊給我 |
如題
.data WC3FXN_Text dd 6F663740h WC3FXN_GlobalClass dd 6F84CC20h .code Warcraft_TextOut proc textloc:DWORD push eax push edx push ecx push 0FFFFFFFFh ;Get the pointer to Warcraft's global class. mov eax, WC3FXN_GlobalClass mov eax, dword ptr ds:[eax] ;Get the pointer to the output class. mov eax, dword ptr ds:[eax 3E0h] mov edx, dword ptr ds:[eax] push 0 push 41200000h lea ecx, dword ptr ss:[esp 08h] push ecx ;Push the text address. mov ecx, textloc push ecx mov ecx, eax call dword ptr [WC3FXN_Text] pop ecx pop edx pop eax ret Warcraft_TextOut endp 轉成C是這樣 void Warcraft_TextOut(DWORD sText) { static int WC3FXN_GlobalClass = 0x6F84CC20; static int WC3FXN_Text = 0x6F663740; __asm { push eax push edx push ecx push 0x0FFFFFFFF mov eax, WC3FXN_GlobalClass mov eax, dword ptr ds:[eax] mov eax, dword ptr ds:[eax 0x3E0] mov edx, dword ptr ds:[eax] push 0 push 0x41200000 lea ecx, dword ptr ss:[esp 0x08] push ecx mov ecx, sText push ecx mov ecx, eax call dword ptr [WC3FXN_Text] pop ecx pop edx pop eax } } 那要轉成Delphi怎麼轉? |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
這裡有 Delphi 使用嵌入式組合語言的範例
http://www.yulv.net/jiajia/article.asp?id=10 <textarea class="delphi" rows="10" cols="60" name="code">這裡有 Delphi 使用嵌入式組合語言的範例 http://www.yulv.net/jiajia/article.asp?id=10 procedure deleteSelf; var hModule: THandle; szModuleName: array[0..MAX_PATH] of char; hKrnl32: THandle; pExitProcess, pdeleteFile, pFreeLibrary, pUnmapViewOfFile: pointer; ExitCode: UINT; begin hModule := GetModuleHandle(nil); GetModuleFileName(hModule, szModuleName, sizeof(szModuleName)); hKrnl32 := GetModuleHandle('kernel32'); pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess'); pdeleteFile := GetProcAddress(hKrnl32, 'deleteFileA'); pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary'); pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile'); ExitCode := system.ExitCode; if ($80000000 and GetVersion()) <> 0 then // Win95, 98, Me asm lea eax, szModuleName push ExitCode push 0 push eax push pExitProcess push hModule push pdeleteFile push pFreeLibrary ret end else begin CloseHandle(THANDLE(4)); asm lea eax, szModuleName push ExitCode push 0 push eax push pExitProcess push hModule push pdeleteFile push pUnmapViewOfFile ret end end end; </textarea></font>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2007-09-12 08:14:46, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |