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 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 @success: MOV DWORD PTR[result], 1 @final: PUSH ESI CALL closehandle 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!