点击下载演示工程

可以用Ollydbg打开程序对照一下机器码是否取对,如下图:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Edit1: TEdit;Memo1: TMemo;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;
typepFunction=function():Integer;
varForm1: TForm1;function code():Integer;function codeEnd():Integer;implementation{$R *.dfm}
function code():Integer;
vari,j,k:Integer;
begini:=10;j:=50;k:=i+j;result:=k;
end;
function codeEnd():Integer; begin
end;procedure TForm1.Button1Click(Sender: TObject);
varfunc1,func2,func3:pFunction;myCode:array of char;codeSize:Integer;i:Integer;
beginASMPUSH 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);{下面这段如看不明白请参考我的另一篇文章}{http://www.cnblogs.com/JiangHuakey/archive/2010/09/25/1834378.html}ASMPUSH 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 beginMemo1.Text:=Memo1.Text+Format('$%x',[Integer(myCode[i])]);end;func3:=pFunction(myCode);i:=func3;Edit1.Text:=IntToStr(i);
end;end.

转载于:https://www.cnblogs.com/JiangHuakey/archive/2010/10/07/1845054.html

用Delphi内联汇编获取机器码相关推荐

  1. 最牛X的GCC 内联汇编

    导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 ...

  2. 在Visual C++ 中使用内联汇编

    一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工 ...

  3. 一步步编写操作系统 79 在c代码中内联汇编

    基本内联汇编是最简单的内联形式,其格式为: asm [volatile] ("assembly code") 各关键字之间可以用空格或制表符分隔也可以紧凑挨在一起不分隔,各部分意义 ...

  4. 一步步编写操作系统 77 内联汇编与ATT语法简介

    内联汇编 之前和大家介绍过了一种汇编方法,就是C代码和汇编代码分别编译,最后通过链接的方式结合在一起形成可执行文件. 另一种方式就是在C代码中直接嵌入汇编语言,强大的GCC无所不能,咱们本节要学习的就 ...

  5. GCC Inline ASM GCC内联汇编

    GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM--GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码 ...

  6. 用VC写Assembly代码(7)--在Visual C++中使用内联汇编

    在Visual C++中使用内联汇编 一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此不需 ...

  7. 在 Visual C++ 中使用内联汇编

    在 Visual C++ 中使用内联汇编 一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此 ...

  8. 汇编语言---GCC内联汇编

    GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC Inline ASM"(GCC内联汇编); 一.基本内联汇编(寄存器前一个%) GCC中基本的内联汇编非常易懂, ...

  9. C语言-ATT拓展内联汇编(ATT/GCC)

    你能看到这篇文章说明你肯定是知道AT&T语法是个什么东西,但是要注意,下文所示示例都是拓展内联汇编,而不是基本内联汇编,代码示例在Ubuntu环境下演示 ATT完整语法如下,asm volat ...

最新文章

  1. Python的优点?
  2. php乱码解决方案,php中文乱码问题的4种解决方案
  3. 以太坊和Metamask开发web应用时不再需要密码
  4. luogu_1002 过河卒
  5. 《快学 Go 语言》第 7 课 —— 冰糖葫芦串
  6. HandlerExceptionResolvers
  7. [css] css如何消除字体的锯齿?
  8. Notes of the scrum meeting(2013/10/23)
  9. 历史上最有影响力的10款开源项目
  10. SaltStack 第二板块安装说明 [2]
  11. javaWeb RSA加密使用
  12. Spring 事务失效的 8 大场景,看看你都遇到过几个?
  13. findwindowex子窗口类型有哪几种_游戏场景该怎么画?来参考一下不同的类型吧
  14. 计算机刻录光盘不显示,为什么我的CD刻录光盘的容量在
  15. 免费素材下载:学校学院相关图标集
  16. 负指数分布的性质_负指数分布.ppt
  17. zemax仿真半导体激光器
  18. ROI区域图像叠加和 初级图像混合
  19. mp3中不可缺少的音乐
  20. python字符串加减乘除_从字符串解析加减乘除符号

热门文章

  1. java关键字保留字_Java这个关键字
  2. python日期时间_Python日期时间
  3. 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  4. 给妹子讲python-S01E05字符串的基本用法详解
  5. js进阶 10-3 jquery中为什么用document.ready方法
  6. form 表单序列化 serialize
  7. 这一大堆打着RAR旗号的文件都是啥
  8. mongodb、mysql、redis的性能对比
  9. 【重要+细节】LeetCode 149. Max Points on a Line
  10. 【暴力】LeetCode 300. Longest Increasing Subsequence