用Delphi内联汇编获取机器码
点击下载演示工程
可以用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内联汇编获取机器码相关推荐
- 最牛X的GCC 内联汇编
导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 ...
- 在Visual C++ 中使用内联汇编
一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工 ...
- 一步步编写操作系统 79 在c代码中内联汇编
基本内联汇编是最简单的内联形式,其格式为: asm [volatile] ("assembly code") 各关键字之间可以用空格或制表符分隔也可以紧凑挨在一起不分隔,各部分意义 ...
- 一步步编写操作系统 77 内联汇编与ATT语法简介
内联汇编 之前和大家介绍过了一种汇编方法,就是C代码和汇编代码分别编译,最后通过链接的方式结合在一起形成可执行文件. 另一种方式就是在C代码中直接嵌入汇编语言,强大的GCC无所不能,咱们本节要学习的就 ...
- GCC Inline ASM GCC内联汇编
GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM--GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码 ...
- 用VC写Assembly代码(7)--在Visual C++中使用内联汇编
在Visual C++中使用内联汇编 一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此不需 ...
- 在 Visual C++ 中使用内联汇编
在 Visual C++ 中使用内联汇编 一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此 ...
- 汇编语言---GCC内联汇编
GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC Inline ASM"(GCC内联汇编); 一.基本内联汇编(寄存器前一个%) GCC中基本的内联汇编非常易懂, ...
- C语言-ATT拓展内联汇编(ATT/GCC)
你能看到这篇文章说明你肯定是知道AT&T语法是个什么东西,但是要注意,下文所示示例都是拓展内联汇编,而不是基本内联汇编,代码示例在Ubuntu环境下演示 ATT完整语法如下,asm volat ...
最新文章
- Python的优点?
- php乱码解决方案,php中文乱码问题的4种解决方案
- 以太坊和Metamask开发web应用时不再需要密码
- luogu_1002 过河卒
- 《快学 Go 语言》第 7 课 —— 冰糖葫芦串
- HandlerExceptionResolvers
- [css] css如何消除字体的锯齿?
- Notes of the scrum meeting(2013/10/23)
- 历史上最有影响力的10款开源项目
- SaltStack 第二板块安装说明 [2]
- javaWeb RSA加密使用
- Spring 事务失效的 8 大场景,看看你都遇到过几个?
- findwindowex子窗口类型有哪几种_游戏场景该怎么画?来参考一下不同的类型吧
- 计算机刻录光盘不显示,为什么我的CD刻录光盘的容量在
- 免费素材下载:学校学院相关图标集
- 负指数分布的性质_负指数分布.ppt
- zemax仿真半导体激光器
- ROI区域图像叠加和 初级图像混合
- mp3中不可缺少的音乐
- python字符串加减乘除_从字符串解析加减乘除符号
热门文章
- java关键字保留字_Java这个关键字
- python日期时间_Python日期时间
- 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
- 给妹子讲python-S01E05字符串的基本用法详解
- js进阶 10-3 jquery中为什么用document.ready方法
- form 表单序列化 serialize
- 这一大堆打着RAR旗号的文件都是啥
- mongodb、mysql、redis的性能对比
- 【重要+细节】LeetCode 149. Max Points on a Line
- 【暴力】LeetCode 300. Longest Increasing Subsequence