标题:近日学汇编有小小成果,Show一下
只看楼主
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
 问题点数:0 回复次数:6 
近日学汇编有小小成果,Show一下
获取机器码.rar (167.98 KB)




请各位老大多多指点
程序代码:
unit Unit1;  

   

interface 

   

uses 

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  

  Dialogs, StdCtrls;  

   

type 

  TForm1 = class(TForm)  

    Button1: TButton;  

    Edit1: TEdit;  

    Memo1: TMemo;  

    procedure Button1Click(Sender: TObject);  

  private 

    { Private declarations } 

  public 

    { Public declarations } 

  end;  

type 

    pFunction=function():Integer;  

var 

  Form1: TForm1;  

  function code():Integer;  

  function codeEnd():Integer;  

   

implementation 

   

{$R *.dfm} 

function code():Integer;  

var 

  i,j,k:Integer;  

begin 

      i:=10;  

      j:=50;  

      k:=i+j;  

      result:=k;  

end;  

function codeEnd():Integer; begin 

end;  

   

procedure TForm1.Button1Click(Sender: TObject);  

var 

  func1,func2,func3:pFunction;  

  myCode:array of char;  

  codeSize:Integer;  

  i:Integer;  

begin 

      ASM 

         PUSH EAX;  

         PUSH EBX;  

         LEA EAX,codeEnd; {获取codeEnd函数的地址} 

         LEA EBX,code;    {获取code函数的地址} 

         SUB EAX,EBX;     {用codeEnd函数的地址减code函数的地址则可得出code函数的} 

                          {大小,因为codeEnd函数刚好位于codeEnd函数的下面。} 

         MOV codeSize,EAX;{把code函数的大小保存在变量codeSize中} 

         POP EBX;  

         POP EAX;  

      END;  

      SetLength(myCode,codeSize);  

      ASM 

         PUSH ESI;  

         PUSH EDI;  

         CLD;  

         LEA ESI,byte ptr[code];  

         MOV EDI,myCode;  

         MOV ECX,codeSize;  

         REP MOVSB;  

         POP EDI;  

         POP ESI;  

      END;  

      for i:=0 to HIGH(myCode)-1 do begin 

          Memo1.Text:=Memo1.Text+Format('$%x',[Integer(myCode[i])]);  

      end;  

      func3:=pFunction(myCode);  

      i:=func3;  

      Edit1.Text:=IntToStr(i);  

end;  

   

end.
搜索更多相关主题的帖子: 汇编 成果 Show 
2010-10-07 12:38
wisji8
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:53
专家分:198
注 册:2010-9-19
得分:0 
差距啊,看来我要再努力了。
2010-10-07 21:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
汇编代码就这几句 呵呵
2010-10-07 22:07
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
得分:0 
.
2010-10-08 01:14
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 

   ASM

         PUSH EAX;  

         PUSH EBX;  

         LEA EAX,codeEnd; {获取codeEnd函数的地址}

         LEA EBX,code;    {获取code函数的地址}

         SUB EAX,EBX;     {用codeEnd函数的地址减code函数的地址则可得出code函数的}

                          {大小,因为codeEnd函数刚好位于codeEnd函数的下面。}

         MOV codeSize,EAX;{把code函数的大小保存在变量codeSize中}

         POP EBX;  

         POP EAX;  

      END;

codeSize = DWORD(@codeEnd - @code) 一句就OK了,何必还用内联汇编。内联汇编只是为了实现高级语言不能或不易实现的功能。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-10-10 12:35
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
回复 5楼 东海一鱼
为了练手。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-10-10 12:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-322155-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021558 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved