Hola a todos..
Hace tiempo que estuve viendo un foro pasado que habla sobre el ensamblador en Delphi..
Por cuestiones de no poder abrir el foro pasado para poner mis dudas sobre codigo que no entiendo, habro este para tal objetivo..
Miren en el post encontre este codigo en ensamblador:
Código Delphi
[-]
program Ejecutor;
uses Windows;
const WM_CHAR= $0102;
var miHandle : DWORD;
data : string ;
App :string ='Notepad.exe';
Wndclass : string = 'Notepad';
Childclass : string= 'Edit';
begin
data := ' Estamos probando como funciona el assembler'+ #13#10+
'en Delphi y como no tenemos ni idea, no sabemos'+#13#10+
'que sucederà .'+#13#10+
'Bueno, no tenemos ni idea de Delphi,'+#13#10+
'en ensamblador , algo si sabemos ,es el primer len-'+#13#10+
'guaje de programación que nos pusimos a intentar '+#13#10+
'aprender o debí escribir aprehender............'+#13#10+
'¿ End ?' ;
asm
pushad
push SW_SHOW
push dword ptr [App ]
call WinExec
push 0
push dword ptr [Wndclass]
call FindWindow
push 0
push Childclass
push 0
push eax
call FindWindowEx
mov [miHandle], eax
mov edx, data
@@eti1:
xor eax, eax
mov al ,byte [edx]
or al, al
jz @@eti2
push edx
push 0
push eax
push WM_CHAR
push [miHandle]
call SendMessage
push 100
call Sleep
pop edx
inc edx
jmp @@eti1
@@eti2:
push 0
call ExitProcess
popad
end;
end.
Posteriormente viene en el post el equivalente codigo pero en codigo Delphi..
Código Delphi
[-]
uses Windows, Messages;
var hWnd, Pos: Cardinal;
Str: PChar = ' Estamos probando como funciona el assembler'#13+
'en Delphi y como no tenemos ni idea, no sabemos'#13+
'que sucederà .'#13+
'Bueno, no tenemos ni idea de Delphi,'#13+
'en ensamblador , algo si sabemos ,es el primer len-'#13+
'guaje de programación que nos pusimos a intentar '#13+
'aprender o debí escribir aprehender............'#13+
'¿ End ?';
begin
Pos := 0;
WinExec('notepad.exe', SW_SHOW);
hWnd := FindWindowEx(FindWindow('Notepad', nil), 0, 'Edit', nil);
while Str[Pos] <> #0 do begin
SendMessage(hWnd, WM_CHAR, Integer(Str[Pos]), 0);
Sleep(100);
Inc(Pos);
end;
end.
Lo que pasa es que tengo ciertas dudas con algunas sentencias como:
1. "Pushad".
2. push dword ptr [App ]??
3. push 0
4. mov [miHandle], eax:
Mi duda aqui es: si el registro eax se pasa al la variable manejado o como??
5. xor eax, eax: esta sentencia borra el registro "eax"?
6. mov al ,byte [edx]: mueve un caracter al registro "al"?
7. or al, al??
8. push edx
push 0
push eax: para que se utilizan estos push??
9. push 100: para que es?...
Bueno esas son mis dudas..
Espero que alguien pueda responder a mis dudas y de antemano disculpen mi ignorancia...
Gracias..