線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1151
推到 Plurk!
推到 Facebook!

Delphi Assembly 呼叫 API 如何求返回值?

答題得分者是:rick060
n4chen
一般會員


發表:9
回覆:7
積分:3
註冊:2011-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-17 22:58:26 IP:203.70.xxx.xxx 訂閱
大家好,我對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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-18 08:49:41 IP:60.250.xxx.xxx 未訂閱
返回值都放在 eax

自己編寫一個 function 再用 CPU Window 觀察
n4chen
一般會員


發表:9
回覆:7
積分:3
註冊:2011-05-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-18 22:26:45 IP:59.104.xxx.xxx 訂閱
 拜託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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-10-19 08:45:53 IP:60.250.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-10-19 20:30:04 IP:203.70.xxx.xxx 訂閱
問題都解決了 謝謝rick060大大
系統時間:2017-10-24 13:57:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!