Entwickler-Ecke

Algorithmen, Optimierung und Assembler - problem nach assemblerprozedur


retnyg - Di 26.04.05 20:31
Titel: problem nach assemblerprozedur

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
function KillProcess(pid: integer): boolean; register;
var procHnd: THandle;
begin
  result := false;
  if pID <> 0 then begin
    asm
       //push DWORD PTR[PID]
       push EAX
       push 0
       push 1
       CALL OpenProcess
       MOV ESI, EAX
       TEST ESI, ESI
       JE @fehler
       PUSH 1
       PUSH ESI
       Call TerminateProcess
       TEST EAX, EAX
       JNZ @success
       @fehler:
       MOV DWORD PTR[result], 0
       jmp @final
//       CALL GetLastError
//       PUSH EAX
//       CALL SysErrorMessage
       @success:
       MOV DWORD PTR[result], 1
       @final:
       PUSH ESI
       CALL closehandle
    endend
{    procHnd := OpenProcess(1, False, pID);
    if procHnd <> 0 then  begin
       result:= TerminateProcess(procHnd, 1);
    CloseHandle(ProcHnd);
    end;
  end; }

end;

wenn ich obigen assemblercode ausführe, bleibt kurz danach das system mit einer fehlermeldung stehen. führe ich hingegen den auskommentierten pascalcode aus, funktioniert alles reibungslos.
hat jemand ne idee weswegen ?


uall@ogc - Di 26.04.05 20:38

habs nicht getestet aber speicher mal ESI ab

mit PUSH ESI und am schluss wieder POP ESI, oder benutz es erst gar nicht (brauchst eigentlich nicht)

deseiteren sprich result direkt an über

mov result, 0

nicht mit []


retnyg - Di 26.04.05 20:42

danke, es lag an dem result ^^
btw die funktion habe ich so aus dem windows taskmanager geklaut. mit den einstellungen bleibt die explorer.exe gekillt, startet sich also nicht von selber wieder so wie bei allen code-schnippseln, die da im web rumschwirrn