Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Probando el emsamblador de Delphi (https://www.clubdelphi.com/foros/showthread.php?t=49732)

Mav 28-10-2007 20:30:20

Probando el emsamblador de Delphi
 
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.
Código Delphi [-]
 program segundo;

uses
  Windows;

const

  SCRCOPY=$00cc0020 ;

 var
       ancho WORD;
       alto  WORD;
    contador WORD;
        HDC  WORD;

begin
    asm
      push SM_CXSCREEN
      call GetSystemMetrics
      mov  [ancho], eax
      push SM_CYSCREEN
      call GetSystemMetrics
      mov  [alto], eax
      shr eax, 1
      mov contador, eax
      push 0
      call GetDC
      mov [HDC], eax
@@eti1:
      push SCRCOPY
      push 0
      push 0
      push [HDC]
      push [alto]
      push [ancho]
      push 1
      push 1
      push [HDC]
      call BitBlt
      dec [alto]
      dec [contador]
      jnz @@eti1
      push [HDC]
      push 0
      call ReleaseDC
      push 0
      call ExitProcess

    end;

end.

dec 28-10-2007 20:42:10

Hola,

:confused: :confused: :rolleyes: :rolleyes: :eek: :eek: :) :p ;) :D

ArdiIIa 28-10-2007 20:53:39

Cita:

Empezado por Mav (Mensaje 241835)
Estamos probando como funciona el assembler
en Delphi y como no tenemos ni idea, no sabemos
que sucederà .
Bueno, no tenemos ni idea de Delphi,
en ensamblador , algo si sabemos ,es el primer len-
guaje de programación que nos pusimos a intentar
aprender o debí escribir aprehender............
¿ End ?

Está bien...:D

aeff 29-10-2007 17:57:50

ostias! no entiendo ni papa de lo que puso este arriba, tendre que probarlo,

o ya lo probaron ustedes?

cHackAll 29-10-2007 19:41:40

Cita:

Empezado por Mav
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.

ésto es un desafio?

:cool: mmm....

Mav 29-10-2007 23:26:38

No es un desafio...
 
Compilandolo y ejecutandolo , te abre el bloc de notas
y te escribe un texto..

aeff 31-10-2007 03:10:04

Eso si que está súper!! donde lo aprendiste a hacer??

aeff 31-10-2007 03:16:13

me he quedado asombrado, me pueden explicar, así que los parametros de las funciones se almacenan en la Pila?? oye eso! nunca me lo habia inmaginado, "el primero en meter es el ultimo en sacar"

je je je!

Black_Ocean 28-03-2008 06:51:13

Cita:

Empezado por aeff (Mensaje 242505)
Eso si que está súper!! donde lo aprendiste a hacer??

Amigo,

El código ensamblador no es nada del otro mundo, todo se logra con paciencia, el aprendizaje y la práctica, Acaso como crees que se practica la ingeniería inversa? Primeramente, dominando el ASM y Hexadecimal, Si fuera algo tan escondido, no habría los millones de reverse enginers que hay en la actualidad (en jerga, conocidos como crackers). Ellos dominan estos temas como si fuera jugar al dominó, yo he conversado con varios reverse engineers rusos y de otros países por IRC que me asombran como dominan estos temas. De hecho, por ellos me he motivado a leer y aprender de a poco Assembler, pero para mi caso, para Delphi y para manejar el OllyDBG y el DeDe (depuradores/desensambladores).

Aprende y practica como yo también lo estoy haciendo y entenderás su lógica y el por qué se usa en cuestión.

En Delphi, se implementó primeramente para que el programador pudiera optimizar rutinas y procedimientos en tiempo de ejecución, lo que se agradece enormemente que borland lo haya implementado desde el principio en este gran lenguaje, cosa que en Visual Basic 6 no es posible "en si". Lo otro, es que Delphi al compilar automáticamente genera código ensamblador, lo que permite un mejor desempeño en tiempo de ejecución, en cambio Visual Basic 6 genera código interpretado, lo que hace que sea más lento en tiempo de ejecución. En ese aspecto, Delphi está mejor diseñado.

Saludos.


La franja horaria es GMT +2. Ahora son las 02:06:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi