Delphi Assembly 呼叫 API 如何求返回值? |
答題得分者是:rick060
|
n4chen
一般會員 ![]() ![]() 發表:9 回覆:7 積分:3 註冊:2011-05-12 發送簡訊給我 |
大家好,我對Assembly有點好奇,所以就亂玩Asm,亂玩得過程也遇到問題
[code delphi] uses windows; //......................................... procedure asmCall_GetCurrentProcessID; var GetCurrentProcessIdAddr:Pointer; begin GetCurrentProcessIdAddr:=@GetCurrentProcessId; asm Call GetCurrentProcessIdAddr // 問題就在這裡如何求ProcessId end; end; [/code] |
rick060
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
|
n4chen
一般會員 ![]() ![]() 發表:9 回覆:7 積分:3 註冊:2011-05-12 發送簡訊給我 |
拜託rick060大大在幫我解決一個問題
procedure TForm1.Button2Click(Sender: TObject); var OpenProcessAddr:Pointer; GetCurrentProcessIDAddr:Pointer; TerminateProcessAddr:Pointer; /// To use parameter bInheritHandle:LongBool; /// Asm Var PID:DWORD; hProcess:THANDLE; begin bInheritHandle:=False; OpenProcessAddr:=@OpenProcess; GetCurrentProcessIDaDDR:=@GetCurrentProcessIDAddr; TerminateProcessAddr:=@TerminateProcess; asm PUSH eax call GetCurrentProcessIDAddr mov PID,eax pop eax ///////////////////////////// PUSH eax PUSH PROCESS_ALL_ACCESS PUSH bInheritHandle PUSH PID call OpenProcessAddr mov hProcess,eax pop eax ///////////////////////////// PUSH eax PUSH hProcess PUSH 0 call TerminateProcessAddr pop eax end; end; 我想寫用TerminateProcess結束自己程序的Asm代碼 但一子錯在 pop esi 請問要如何更正
編輯記錄
n4chen 重新編輯於 2011-10-18 08:27:34, 註解 無‧
|
rick060
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
begin
asm call GetCurrentProcess mov edx , eax push 0 push edx call TerminateProcess end; end; 在 call WINAPI 時,參數是由右至左 push 進 stack 建議熟讀文章 http://www.delphi3000.com/articles/article_3766.asp |
n4chen
一般會員 ![]() ![]() 發表:9 回覆:7 積分:3 註冊:2011-05-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |