全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1774
推到 Plurk!
推到 Facebook!

這段asm程式碼如何轉成Delphi

答題得分者是:pcboy
ddddd688
一般會員


發表:8
回覆:8
積分:3
註冊:2007-01-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-12 01:25:08 IP:220.139.xxx.xxx 訂閱
如題

.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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-12 08:14:00 IP:61.220.xxx.xxx 訂閱
這裡有 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, 註解 無‧
系統時間:2024-04-20 9:06:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!